【问题标题】:JSON library for C# [closed]C# 的 JSON 库 [关闭]
【发布时间】:2009-09-24 21:54:40
【问题描述】:

Microsoft 是否提供任何库来处理 C# 中的 JSON?如果没有,你推荐什么开源库?

【问题讨论】:

  • 您是指消费、创造还是两者兼而有之?
  • 消费和创造。谢谢

标签: c# json


【解决方案1】:

【讨论】:

  • 使用 JSON.NET 相比 System.Web.Script.Serialization.JavaScriptSerializer 有什么优势?
  • 它允许您用作类属性,而不是仅序列化字符串,因为...还有更多......
  • 不要使用 JavaScriptSerializer,它比我基准测试过的大多数其他 JSON 序列化器慢大约 40 倍。
  • 最新的 JSON.NET 版本与 .NET Framework 3.5 存在一些问题。可通过安装 .NET Framework 3.5 SP1 进行恢复。但是,如果您无法更改为 .NET Framework 3.5 SP1,请不要使用 JSON.NET
  • 我已经尝试过 JSON.NET,但在我看来,他们在多态性方面遇到了问题。为了使 JSON.NET 能够反序列化继承的对象,JSON.NET 需要一个名为“$type”的属性,其中包含类型名称,但是,我认为它需要完整的类型名称,这不是很好当你在另一端有一个 JAVA/Android 的东西时。
【解决方案2】:

您还应该尝试我的 ServiceStack JsonSerializer - 它是目前最快的 .NET JSON 序列化程序 based on the benchmarks of the leading JSON serializers 并支持序列化任何 POCO 类型、DataContracts、列表/字典、接口、继承、后期绑定对象,包括匿名类型等。

基本示例

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = customer.ToJson();
var fromJson = json.FromJson<Customer>(); 

注意:仅当性能对您不重要时才使用 Microsoft 的 JavaScriptSerializer,因为我不得不将它排除在我的基准测试之外,因为它比其他 JSON 序列化程序慢 40x-100x

【讨论】:

    【解决方案3】:

    .net 框架通过 JavaScriptSerializer 支持 JSON。这是一个很好的示例,可以帮助您入门。

    using System.Collections.Generic;
    using System.Web.Script.Serialization;
    
    namespace GoogleTranslator.GoogleJSON
    {
        public class FooTest
        {
            public void Test()
            {
                const string json = @"{
                  ""DisplayFieldName"" : ""ObjectName"", 
                  ""FieldAliases"" : {
                    ""ObjectName"" : ""ObjectName"", 
                    ""ObjectType"" : ""ObjectType""
                  }, 
                  ""PositionType"" : ""Point"", 
                  ""Reference"" : {
                    ""Id"" : 1111
                  }, 
                  ""Objects"" : [
                    {
                      ""Attributes"" : {
                        ""ObjectName"" : ""test name"", 
                        ""ObjectType"" : ""test type""
                      }, 
                      ""Position"" : 
                      {
                        ""X"" : 5, 
                        ""Y"" : 7
                      }
                    }
                  ]
                }";
    
                var ser = new JavaScriptSerializer();
                ser.Deserialize<Foo>(json);
            }
        }
    
        public class Foo
        {
            public Foo() { Objects = new List<SubObject>(); }
            public string DisplayFieldName { get; set; }
            public NameTypePair FieldAliases { get; set; }
            public PositionType PositionType { get; set; }
            public Ref Reference { get; set; }
            public List<SubObject> Objects { get; set; }
        }
    
        public class NameTypePair
        {
            public string ObjectName { get; set; }
            public string ObjectType { get; set; }
        }
    
        public enum PositionType { None, Point }
        public class Ref
        {
            public int Id { get; set; }
        }
    
        public class SubObject
        {
            public NameTypePair Attributes { get; set; }
            public Position Position { get; set; }
        }
    
        public class Position
        {
            public int X { get; set; }
            public int Y { get; set; }
        }
    }
    

    【讨论】:

    • 这是很好的代码,我怎样才能将其中的一个类取回结果?例如 ObjectName 输出到结果为“测试名称”的文本框?我试过'test = GoogleTranslator.GoogleJSON.NameTypePair.ObjectName' messagebox.show(test)
    【解决方案4】:

    如果你看这里,你会看到 C# 上的几个不同的 JSON 库。

    http://json.org/

    您会发现 LINQ 以及其他一些版本。大约有 7 个 C# 和 JSON 库。

    【讨论】:

      【解决方案5】:

      【讨论】:

        【解决方案6】:

        看看 system.web.script.serialization 命名空间(我认为你需要 .Net 3.5)

        【讨论】:

          【解决方案7】:

          要对这个问题给出一个更新的答案:是的,.Net 包括自 3.5 版以来通过 System.Runtime.Serialization.Json 命名空间的 JSON seriliazer/deserliazer: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json(v=vs.110).aspx

          但根据 JSON.Net 的创建者的说法,.Net 框架与他的开源实现相比要慢得多。

          【讨论】:

            【解决方案8】:

            为了回答您的第一个问题,Microsoft 提供了一个 DataContractJsonSerializer:请参阅 msdn How to: Serialize and Deserialize JSON Data

            【讨论】:

              【解决方案9】:

              试试 Vici 项目,Vici Parser。它包括一个 JSON 解析器/标记器。效果很好,我们将它与 MVC 框架一起使用。

              更多信息请访问:http://viciproject.com/wiki/projects/parser/home

              我忘了说它是开源的,所以你可以随时查看代码。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-03-05
                • 2011-02-03
                • 2011-11-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-30
                相关资源
                最近更新 更多