我试图不依赖于开源或第三方库(如Json.NET)来解析来自HttpWebResponse的传入JSON。为什么?因为越来越依赖开源框架来帮助实现,你的应用程序必须依赖这些依赖关系......我不喜欢我的应用程序在许多库中依赖于多种原因,如果可能的话。我可以使用像Enterprise Library这样的东西,因为它得到了MS的支持,但我正在使用更多的开源库。
无论如何,我正试图找出在.NET 3.5中解析传入JSON服务器端的最佳方法。
我知道这会得到很多回复,我甚至使用.NET 3.5 JavaScriptSerializer将数据序列化为JSON,但现在我试图找出最好和最简单的方法来做反向再次,必须使用第三方/开源框架来帮助解决这个问题。
答案 0 :(得分:10)
Microsoft 推荐 JSON序列化程序为DataContractJsonSerializer
此类存在于 System.Runtime.Serialization 程序集
该示例演示了如何将JSON数据反序列化为对象。
MemoryStream stream1 = new MemoryStream();
Person p2 = (Person)ser.ReadObject(stream1);
要将Person类型的实例序列化为JSON,请首先创建DataContractJsonSerializer,然后使用WriteObject方法将JSON数据写入流中。
Person p = new Person();
//Set up Person object...
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream1, p);
更新:已添加帮助程序类
这是一个示例助手类,可用于简单的To / From Json序列化:
public static class JsonHelper
{
public static string ToJson<T>(T instance)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream())
{
serializer.WriteObject(tempStream, instance);
return Encoding.Default.GetString(tempStream.ToArray());
}
}
public static T FromJson<T>(string json)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
return (T)serializer.ReadObject(tempStream);
}
}
}