【发布时间】:2009-09-24 21:54:40
【问题描述】:
Microsoft 是否提供任何库来处理 C# 中的 JSON?如果没有,你推荐什么开源库?
【问题讨论】:
-
您是指消费、创造还是两者兼而有之?
-
消费和创造。谢谢
Microsoft 是否提供任何库来处理 C# 中的 JSON?如果没有,你推荐什么开源库?
【问题讨论】:
【讨论】:
您还应该尝试我的 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。
【讨论】:
.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; }
}
}
【讨论】:
【讨论】:
【讨论】:
看看 system.web.script.serialization 命名空间(我认为你需要 .Net 3.5)
【讨论】:
要对这个问题给出一个更新的答案:是的,.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 框架与他的开源实现相比要慢得多。
【讨论】:
为了回答您的第一个问题,Microsoft 提供了一个 DataContractJsonSerializer:请参阅 msdn How to: Serialize and Deserialize JSON Data
【讨论】:
试试 Vici 项目,Vici Parser。它包括一个 JSON 解析器/标记器。效果很好,我们将它与 MVC 框架一起使用。
更多信息请访问:http://viciproject.com/wiki/projects/parser/home
我忘了说它是开源的,所以你可以随时查看代码。
【讨论】: