.net 使用Json(),maxJsonLength属性设置的值问题
http://www.cnblogs.com/ericli-ericli/p/5615644.html
“使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了为maxJsonLength属性设置的值”
今天业务找我说线上的国家地区都显示数字(地区ID),而不显示地区名字。
当时我觉得不太可能啊,虽然控件很老,已经替换了,还没到发布日期,但是线上的代码绝对没问题啊。
等我去看页面,才懵逼了,真的有问题,但是线上master的代码在本地附加到进程完全OK.
猜想:
1、线上JS文件有改动;
2、配置文件有改动
然后开始查看Git记录发现今天并没有上传记录。查看线上日志,发现一个奇怪的异常:上面加粗的那行。
然后就开始觉得应该是代码出问题了。
问了下度娘,看到大多数这种问题的解决办法:
在web.config的节点下添加:
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="1024000000" /> </webServices> </scripting> </system.web.extensions>
这样用来增加maxJsonLength的长度值。
结合自己的项目,原来的老控件,不是分页加载地区而是拿全量(前几任开发挖的坑),平时一直采用MVC的Json()将数据序列化成json格式,昨天突然增加了几个城市的信息,数据量增加到了49000多,取整个数据是,就撑破了
maxJsonLength的默认值(网上有说是4M,有说是2M)。悲催的小编顺带着将没过QA的分页加载的控件也一并上传了,还好没出问题。
问题解决了,但是小编还是觉得其中有疑问,就查询了更多帖子,发现一种更加完美的方式:
public ActionResult GetLargeJsonResult() { return new ContentResult { Content = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(listResult), ContentType = "application/json" }; }
另外,发现一个讲解更加透彻的帖子,附上地址:http://www.cnblogs.com/artech/archive/2012/08/15/action-result-03.html