【问题标题】:Way to Deserialize JSON from HttpWebResponse without 3rd party frameworks在没有第三方框架的情况下从 HttpWebResponse 反序列化 JSON 的方法
【发布时间】:2010-08-02 19:30:14
【问题描述】:

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

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

我知道这会得到很多响应,我什至使用 .NET 3.5 JavaScriptSerializer 将数据序列化为 JSON,但现在我试图找出最好和最简单的方法来做相反的事情再次,不得不使用第 3 方/开源框架来帮助解决这个问题。

【问题讨论】:

    标签: c# asp.net json serialization datacontractjsonserializer


    【解决方案1】:

    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);
    

    更新:添加了 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);
            }
        }
    }
    

    【讨论】:

    • 你知道这个类是什么时候创建的吗?这意味着我想知道这是否是一个比 .NET 3.5 JavaScript 序列化更新的框架类。因为我更愿意选择最新的,因为它可能不会很快过时......如果有的话。
    • @CoffeeAddict,我添加了一个提供序列化和反序列化的示例帮助器类。
    • 你在哪里看到 MS 推荐了这个。我在 MSDN 上但没有看到。
    • DataContractJsonSerializer 较新,随 .NET 3.5 发布。 JavaScriptSerializer 最初是在 ASP.NET 2.0 的 ASP.NET 1.0 扩展中引入的。
    • 是的,看到了。我只是想弄清楚现在基本上要走哪条路。 JavaScriptSerializer 与 DataContract
    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 2021-10-27
    • 2012-05-04
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多