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

Pos*_*Guy 2 c# asp.net serialization json datacontractjsonserializer

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

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

我知道这会得到很多响应,我甚至使用.NET 3.5 JavaScriptSerializer将数据序列化为JSON,但现在我正试图找出最好和最简单的方法来做反向,不用再做了使用第三方/开源框架来帮助实现这一目标.

Wal*_*eza 10

微软推荐的JSON序列化DataContractJsonSerializer在内部存在这个类System.Runtime.Serialization总成

该示例演示了如何将JSON数据反序列化为对象.

MemoryStream stream1 = new MemoryStream();     
Person p2 = (Person)ser.ReadObject(stream1);
Run Code Online (Sandbox Code Playgroud)

要将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);
Run Code Online (Sandbox Code Playgroud)

更新:添加了助手类

这是一个示例助手类,可用于简单的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)