c#中的JSON解码

时间:2009-08-26 12:54:39

标签: c# json

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

4 个答案:

答案 0 :(得分:22)

查看DataContractJsonSerializer。您必须以.NET 3.5为目标,这意味着非常需要Visual Studio 2008。 Here's a good blog post关于使用Json数据协定序列化程序。

答案 1 :(得分:5)

答案 2 :(得分:5)

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

答案 3 :(得分:3)

.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中使用一些代码,你不想重写你的代码电话,你不想写一个函数来美化JSON,如果你想看看你是否正确的类,你不会想要编写自己的方法去除引号只是因为微软的库可以' t处理无效的JSON。

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