“使用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