Небольшое обновление:
В качестве альтернативы System.Web или JSON.net есть также JSONFX и ServiceStack.Text
Для настольного приложения одно решение для выполнения запроса JSON приведено ниже. Возможно, где-то уже есть 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());
Default.aspx в веб-приложении ASP.NET:
[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; }
}