C#中的JSON;发送和接收数据

时间:2010-01-16 12:11:09

标签: c# winforms json

我正在尝试为请求和响应应用程序创建桌面客户端。

我可以轻松地进行GET请求。但我想知道是否有人可以帮我弄清楚如何做JSON请求和响应。并将其解析为一个字符串,从那里我可以锻炼如何将它全部切开

3 个答案:

答案 0 :(得分:20)

小更新:

作为System.Web或JSON.net的替代方案,还有JSONFXServiceStack.Text


对于桌面应用程序,下面是一个用于发出JSON请求的解决方案。可能有一个API在某处已经做到这一点,但我没有找到任何。

桌面应用

'Test'就是为了演示传递参数。在System.Web.Extensions.dll中找到JavaScriptSerializer

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出现在网络应用和控制台应用中,但您需要将其作为域对象放在自己的程序集中,并在两个位置引用它。

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

答案 1 :(得分:13)

Json.net在.net世界中无处不在。

答案 2 :(得分:3)

查看System.Web.Extensions.dll程序集中的System.Web.Script.Serialization.JavaScriptSerializer类。

它包含Serialize和Deserialize&lt; T>方法相当简单易用。