我正在尝试为请求和响应应用程序创建桌面客户端.
我能够轻松地完成GET请求.但我想知道是否有人可以帮我弄清楚如何做JSON请求和响应.并将其解析成一个字符串,从那里我可以锻炼如何将它全部切开
Chr*_*s S 20
小更新:
作为System.Web或JSON.net的替代品,还有JSONFX和ServiceStack.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)
[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
出现在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)