c#中的JSON解码

如何解码c#中的json响应?

查看DataContractJsonSerializer 。 您必须以.NET 3.5为目标,这意味着非常需要Visual Studio 2008。 这是一篇关于使用Json数据合同序列化程序的好文章 。

有关DataContractJsonSerializer的信息,请参见此处

除了上面的3.5方法之外,如果安装ASP.NET 2.0 AJAX Extensions 1.0 (2.0是框架版本),您将获得System.Web.Script.Serialization.JavaScriptSerializer类,它可以编码/解码json。

.NET集成类有其优点。 但他们有缺点。

例如,DataContractJsonSerializer在.NET 2.0中不可用,System.Web.Extensions需要管理员权限才能安装它(在.NET 2.0中 – 如果没有WebSite项目,可以对其进行本地复制)加上它不起作用SilverLight和WindowsPhone。 如果您有一个WebSite项目,则需要将System.Web.Extensions程序集复制到项目中,然后将其从GAC中删除,否则VisualStudio不会理解它必须对它们进行局部复制。

但更重要的是,如果您使用几乎任何JavaScript库,例如SlickGrid(AJAX网格),您将偶然发现这个有效的JavaScript对象(但它是无效的JSON,因为fnFormatDate_DE是函数调用而不是文本,它缺少引号):

 FormatterCallback : { name : "DateFormatter_DE" func: fnFormatDate_DE(val) } 

没有机会使用任何.NET集成类来序列化它(因为它是无效的JSON)。 此外,它们在性能,SilverLight,Windows Phone和WindowsRT的可用性方面都不尽如人意。 它们既不是OpenSource也不是MIT许可。 它们不支持缩进(人类可读的JSON),并且它们无法序列化DataTable,并且它们在循环引用方面存在问题。 您无法使用它们处理序列化错误,无法将枚举序列化为其名称,也无法切换日期格式(确定,这不是真正的问题,因为MS日期格式是Safari的唯一日期格式废话理解[它没有看不到ISO]),他们既没有序列化nHibernate也没有实体…

但最重要的是,如果你想从.NET 2.0升级到4.0,你不会想要切换你的库或调整项目引用,如果你想在SilverLight / Windows Phone中使用一些代码,你不想重写你的代码,你不想写一个函数来美化JSON,如果你想看看你是否正确的类,并且你不想编写自己的方法去除引号只是因为微软的库无法处理无效JSON。

此外,Microsoft的库性能较低,无法序列化为BSON(与MongoDB等NoSQL数据库一起使用)。
因此,出于所有这些原因,您最好选择NewtonSoft JSON(JSON.NET)。
它是免费的OpenSource( MIT许可证 ,而不是GPL )。
这里有一个很好的比较矩阵:
http://james.newtonking.com/pages/json-net.aspx