質問: UnityのC#でゲーム作成をしております。 Unityに実装されているJsonUtilityを使用した Jsonの導通テストをしたいと考えています。 モック用APIサーバーの構築方法がわからず、 構築方法を探して回っている状況です。 (サーバーエンジニアさんの手を煩わせず簡単なテストぐらいはできるようにしたい) ■やりたい事 クラスをシリアライズしHttpWebRequestを用いてサーバーへリクエスト ↓ リクエストで送信したものをそのままレスポンスに返してもらいデシリアライズする。 ■環境 Unity5.3.0f4 Windows7 64bit
回答: `HttpListener`および`DataContractJsonSerializer`を使ってテスト用のJSONを返すサーバーを実装した例です。参照設定には「System」「System.Net」「System.Xml」「System.Runtime.Serialization」を追加してください。なお実行には管理者権限が必要です。 ``` using System; using System.IO; using System.Net; using System.Runtime.Serialization.Json; using System.Text; class Program { static void Main(string[] args) { using (var h = new HttpListener()) { // TODO:リッスンするホスト名とポートを指定します。 h.Prefixes.Add("http://*:58080/"); h.Start(); for (; ; ) { var c = h.GetContext(); var req = c.Request; // TODO:ここでURLを切り分けます Console.WriteLine(req.RawUrl); if (req.HasEntityBody) { // TODO:ここでリクエストボディに対する処理を行います。 using (var sr = new StreamReader(req.InputStream, new UTF8Encoding(false))) { Console.WriteLine(sr.ReadToEnd()); } } // JSONとして返したい値 var value = new Result() { Value = true, Message = "あいうえおabcde" }; // レスポンスにJSONを書き込みます。 HttpListenerResponse res = null; try { res = c.Response; res.ContentType = "application/json"; new DataContractJsonSerializer(typeof(Result)).WriteObject(res.OutputStream, value); } finally { res.Close(); } } } } } public class Result { public bool Value { get; set; } public string Message { get; set; } } ``` 上記のコードはUnityでは動かないような気がしますが、Visual Studioがない場合でもWindows 7に標準添付されているC#コンパイラを使えば > > c:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /out:C:\test\mock.exe /reference:system.net.dll /reference:system.xml.dll /reference:system.servicemodel.web.dll c:\test\mockhttplistener.cs > > > のようにコマンドプロンプトからコンパイルできると思います。コンパイルしてアプリを表示したうえで、`http://localhost:58080/`にアクセスすればブラウザにJSONが表示されるはずです。