【问题标题】:Parsing JSON objects to c#将 JSON 对象解析为 c#
【发布时间】:2010-02-01 17:50:06
【问题描述】:

我正在尝试使用此链接中的示例 http://sharpdevpt.blogspot.com/2009/10/deserialize-json-on-c.html?showComment=1265045828773#c2497312518008004159

但是我的项目不会使用 JavaScriptConvert.DeserializeObject 编译,示例说这是来自 .net 库,有人知道是哪一个吗?

我知道下面的示例使用 Newtonsoft.Json....

【问题讨论】:

    标签: c# json .net-3.5


    【解决方案1】:

    .NET 中的 Javascript 序列化程序是 System.Web.Script.Serialization 命名空间的一部分。

    这是我用来反序列化字符串的示例扩展方法:

    public static T FromJSON<T>(this string json)
     {
                JavaScriptSerializer jss = new JavaScriptSerializer();
    
                return jss.Deserialize<T>(json);
     }
    

    由于这是string 的扩展方法,您可以在任何字符串上使用它。

    MyCustomType = myJsonString.FromJSON<MyCustomType>();
    

    【讨论】:

    • 错误 1 ​​命名空间“System.Web”中不存在类型或命名空间名称“脚本”(您是否缺少程序集引用?)但我有 System.Web dll
    • 非常感谢我将如何使用您的方法?
    • 命名空间在System.Web.Extensions.dll。快速 MSDN 搜索即可找到。
    • @van - 这是字符串的扩展方法,所以一旦你包含了包含这个方法的类(使用 using 语句),你可以简单地在任何字符串上调用它。例如"{\"something\": {\"somethingElse\"}}".FromJSON();
    【解决方案2】:

    您可能还想看看JSON.NET,它是一个免费的开源项目,它比内置的 .NET JSON 序列化程序快很多,而且它也可用于 .NET 1 .x 和 2.0,如果您仍然需要支持它们。

    这确实是一款了不起的软件!强烈推荐。

    【讨论】:

      【解决方案3】:

      您发布的链接来自我的博客,使用它有什么问题?请随时回复博客文章或将我发送至 ricmrodrigues@gmail.com。 我已经用了一段时间了,效果很好。

      关于嵌入在 .Net 框架中的讨论的 JavascriptSerializer,问题是该序列化器不会序列化到列表。如果你想这样做,你需要使用 Newtonsoft.JSON 来做,因为 .NET Framework 根本不支持它。而且由于它的主要用途是将 JSON 返回到某些客户端脚本,用于搜索或其他任何事情,因此 List 是必须的。

      【讨论】:

        【解决方案4】:

        但是使用那段代码,您无法反序列化/序列化 List,这在您处理结果集时非常方便,并且比 .NET 的内置 .JavascriptSerializer 性能更高,因此 Newtonsoft.Json是最好的选择:

        对于您的自定义类型的单个对象:

        classtype myDeserializedObj = (classtype)JavaScriptConvert.DeserializeObject(jsonString, typeof(classtype));       
        

        对于您的自定义类型的对象列表:

        List<classtype> myDeserializedObjList = (List<classtype>)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, typeof(List<classtype>));
        

        【讨论】:

          【解决方案5】:

          问题在于 Newtonsoft.Json 无法处理字符串中嵌入的正则表达式。它认为 \( 是一个糟糕的转义序列。这就提出了一个问题:Newtonsoft 在带引号的字符串中查看什么业务?“....”应该告诉转换器这些东西是原样的。

          【讨论】:

            【解决方案6】:

            反序列化的简单方法 http://blogs.msdn.com/rakkimk/archive/2009/01/30/asp-net-json-serialization-and-deserialization.aspx

            JavaScriptSerializer js = new JavaScriptSerializer();
            Person p2 = js.Deserialize<classtype>(str);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-06-26
              • 1970-01-01
              • 2017-07-27
              • 2014-10-17
              相关资源
              最近更新 更多