使用Json.Net解决MVC中各种json操作

Posted 吴晓阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Json.Net解决MVC中各种json操作相关的知识,希望对你有一定的参考价值。

最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能。
NewtonSoft.json也就是Json.Net性能虽然不是最好的,但是是比较靠前的,其功能是最强大的,包含各种json操作模式。现在来看看mvc中的替换
1, Controller.Json方法
这个方法最容易出现循环引用,比如EF查出一个一对多集合想序列化,结果a引用了子表b,b中还引用了a,导致序列化递归溢出,解决方法在此:
http://www.cnblogs.com/Gryzor/archive/2013/05/06/3062373.html


2,模型绑定
比如ajax中传递了一组数据 {a:123, b:\'{ 复杂类型}\'} //b里面使用的是json字符串
action方法中的参数 (int a,复杂类型 b)
解决方法:http://www.dotblogs.com.tw/a802216/archive/2013/06/01/105163.aspx
当然此时 (int a,string b)然后自己反序列化b也是可以的。


3,值适配器绑定
最近的一篇文章:http://www.cnblogs.com/dudu/p/mvc_json_value_provider_factory.html
{a:123, b:{ 复杂类型}} // 是真正的json对象哦
contenttype也必须为 application/json, 默认的实现性能差还啰嗦,替换后很不错。当然这样做性能还是不如第2种的。


至此mvc中各种json替换完毕,你将获得更好的性能和更可靠的json操作,其他地方json操作也推荐都用json.net,经过测试,序列化最慢的就是第一次,第二次开始速度比拼字符串还要快。所以千万别再拼接字符串了,你拼不标准,或者说你懒得拼标准,到处是双引号你哪里肯拼标准了。

以上是关于使用Json.Net解决MVC中各种json操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MVC 5 项目中使用 Json.NET 进行 JSON 模型绑定?

使用 Json.Net 作为 MVC 中的默认格式化程序,而不是 API [重复]

ASP.NET MVC 下自定义 JsonResult,使用 Json.NET 序列化 JSON

如何使用 JSON.NET 通过 ASP.NET MVC 传递 JSON 日期值? [复制]

动态 JContainer (JSON.NET) & 在运行时迭代属性

如何从 ASP.NET MVC 控制器方法返回由 JSON.NET 序列化的 camelCase JSON?