在没有第三方框架的情况下从HttpWebResponse反序列化JSON的方法

时间:2010-08-02 19:30:15

标签: c# asp.net json serialization datacontractjsonserializer

我试图不依赖于开源或第三方库(如Json.NET)来解析来自HttpWebResponse的传入JSON。为什么?因为越来越依赖开源框架来帮助实现,你的应用程序必须依赖这些依赖关系......我不喜欢我的应用程序在许多库中依赖于多种原因,如果可能的话。我可以使用像Enterprise Library这样的东西,因为它得到了MS的支持,但我正在使用更多的开源库。

无论如何,我正试图找出在.NET 3.5中解析传入JSON服务器端的最佳方法。

我知道这会得到很多回复,我甚至使用.NET 3.5 JavaScriptSerializer将数据序列化为JSON,但现在我试图找出最好和最简单的方法来做反向再次,必须使用第三方/开源框架来帮助解决这个问题。

1 个答案:

答案 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);
        }
    }
}