

UnityのC#でゲーム作成をしております。  
Unityに実装されているJsonUtilityを使用した  
Jsonの導通テストをしたいと考えています。

モック用APIサーバーの構築方法がわからず、  
構築方法を探して回っている状況です。  
（サーバーエンジニアさんの手を煩わせず簡単なテストぐらいはできるようにしたい）

■やりたい事  
クラスをシリアライズしHttpWebRequestを用いてサーバーへリクエスト  
↓  
リクエストで送信したものをそのままレスポンスに返してもらいデシリアライズする。

■環境  
Unity5.3.0f4  
Windows7 64bit


CC BY-SA 3.0
2016-02-11T03:29:30.683
21964
2016-02-11T04:46:14.200
5261
question
c# json
Jsonを送受信するモック用APIサーバーを作成するには？


`HttpListener`および`DataContractJsonSerializer`を使ってテスト用のJSONを返すサーバーを実装した例です。参照設定には「System」「System.Net」「System.Xml」「System.Runtime.Serialization」を追加してください。なお実行には管理者権限が必要です。

[code]

    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; }
    }
    
[/code]

上記のコードは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が表示されるはずです。


CC BY-SA 3.0
2016-02-11T04:27:27.097
21967
2016-02-11T04:46:14.200
2016-02-11T04:46:14.200
5750
5750
21964
answer