web-dev-qa-db-ja.com

C#のJSON;データの送受信

Request and Responseアプリケーション用のデスクトップクライアントを作成しようとしています。

GETリクエストも簡単にできます。しかし、JSONのリクエストとレスポンスの実行方法を誰かが教えてくれるかどうか疑問に思っていました。そしてそれを文字列に解析し、そこからすべてを切り開く方法を試すことができます

16
Pankaj Mishra

Json.net は.netの世界のいたるところにあります。

13
Quintin Par

小さな更新:

System.WebまたはJSON.netの代わりとして、 [〜#〜] jsonfx [〜#〜] および ServiceStack.Text もあります。


デスクトップアプリケーションの場合、JSONリクエストを作成するための1つのソリューションを以下に示します。既にこれを行うためのAPIがどこかにあるかもしれませんが、私は何も見つけていません。

デスクトップアプリ

「テスト」は、パラメーターの受け渡しを示すためにここにあります。 JavaScriptSerializerはSystem.Web.Extensions.dllにあります。

HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create("http://localhost:2616/Default.aspx/JsonTester");
request.ContentType = "application/json; charset=utf-8";
request.Accept = "application/json, text/javascript, */*";
request.Method = "POST";
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write("{id : 'test'}");
}

WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
string json = "";

using (StreamReader reader = new StreamReader(stream))
{   
    while (!reader.EndOfStream)
    {
        json += reader.ReadLine();
    }
}

// 3.5+ adds 'D' to the result, e.g.
// {"d":"{\"Name\":\"bob\",\"Age\":20,\"Foods\":[\"cheeseburger\",\"caviar\"]}"}
// So it thinks it's a dictionary with one key/value
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> x = (Dictionary<string, object>)serializer.DeserializeObject(json);
MyData data = serializer.Deserialize<MyData>(x["d"].ToString());

ASP.NET WebアプリケーションのDefault.aspx:

[WebMethod]
public static string JsonTester(string id)
{
    JavaScriptSerializer ser = new JavaScriptSerializer();

    var jsonData = new MyData()
    {
        Name = "bob",
        Age = 20,
        Foods = new List<string>()
    };

    jsonData.Foods.Add("cheeseburger");
    jsonData.Foods.Add("caviar");

    var result = ser.Serialize(jsonData);
    return result;
}

MyDataオブジェクト

MyDataはWebアプリとコンソールアプリの両方に表示されますが、独自のアセンブリにドメインオブジェクトとして配置し、2つの場所で参照する必要があります。

public class MyData
{
    public string Name { get; set; }
    public int Age { get; set; }
    public IList<String> Foods { get; set; }
}
20
Chris S

System.Web.Extensions.dllアセンブリの System.Web.Script.Serialization.JavaScriptSerializer クラスを調べます。

これにはSerializeメソッドとDeserialize <T>メソッドが含まれており、かなり簡単に使用できます。

3