一尘不染

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

json

我试图避免依赖开放源代码或第三方库(例如Json.NET)来解析来自HttpWebResponse的传入JSON。为什么?因为越依赖于开源框架来帮助实现,您的应用程序就越需要依赖于这些依赖…我不希望我的应用程序尽可能地依赖于很多库,这有很多原因。我可以使用诸如Enterprise
Library之类的东西,因为它受MS支持,但是我采用了更多的开源库。

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

我知道这将得到很多响应,我什至使用.NET 3.5
JavaScriptSerializer将数据序列化为JSON,但是现在我试图找出最好的和最简单的方法来进行反向操作,而无需使用第三方/开源框架来帮助实现这一目标。


阅读 241

收藏
2020-07-27

共1个答案

一尘不染

微软 推荐的 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);

更新: 添加了Helper类

这是一个示例帮助程序类,可用于简单的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);
        }
    }
}
2020-07-27