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

Pan*_*hra 16 c# json winforms

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

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

Chr*_*s S 20

小更新:

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


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

桌面应用

'Test'就是为了证明传递参数.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());
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

MyData对象

MyData 出现在Web应用程序和控制台应用程序中,但您希望将其作为域对象放在自己的程序集中,并在两个位置引用它.

public class MyData
{
    public string Name { get; set; }
    public int Age { get; set; }
    public IList<String> Foods { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Qui*_*Par 13

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

  • 我会冒险猜测,经常使用JavaScriptSerializer比Json.net更常用,我几乎不称它为无处不在.只有对数据进行转换或查询的人才真正需要Json.net.但是,仍然有用的信息. (6认同)