我正在尝试为请求和响应应用程序创建桌面客户端。
我可以轻松地进行GET请求。但我想知道是否有人可以帮我弄清楚如何做JSON请求和响应。并将其解析为一个字符串,从那里我可以锻炼如何将它全部切开
答案 0 :(得分:20)
小更新:
作为System.Web或JSON.net的替代方案,还有JSONFX和ServiceStack.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应用程序中的[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
出现在网络应用和控制台应用中,但您需要将其作为域对象放在自己的程序集中,并在两个位置引用它。
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>方法相当简单易用。