如何解码c#中的json响应?
答案 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