今天客戶突然過來找我說在后台添加了一篇超長的文章后,所有后台的文章都顯示不出來了。后台的前端顯示是用easyui的,返回的數據全是用json。根據客戶的描述進行了同樣的操作后,在firebug下發現ajax返回的異常 “序列化或JSON的JavaScriptSerializer過程中出現錯誤。字符串的長度超過上maxJsonLength屬性設置的值”
這個異常是在執行MVC中的JsonResult的時拋出的,根據異常 的Message得知是序列化的字符串超出了maxJsonLength的限制。並得知這個屬性是由JavaScriptSerializer提供的,因 為MVC內置的JsonResult是用JavaScriptSerializer進行序列化的。在網上快速搜索了一下,碰到這個問題的不少,大部分 推薦的解決的方法都是在web.config中加入以下配置,設置maxJsonLength的長度即
1 <system.web.extensions> 2 <scripting> 3 <webServices> 4 <jsonSerialization maxJsonLength="102400"/> 5 </webServices> 6 </scripting> 7 </system.web.extensions>
然后根據需要改變maxJsonLength的大小
運行正常,但是問題依舊還在,而且不管maxJsonLength設置成多大都無效
沒辦法,只能繼續搜索查找資料了。
原來MVC框架內置的JsonResult代碼中,在使用JavaScriptSerializer時,都是采用的默認值,沒有從maxJsonLength讀取值,即忽略了這個配置。
最后在stackoverflow上找到了答案
在控制器中添加兩個JsonResult,然后在需要返回大數據json的action調用,即用return LargeJson()代替return Json()
public JsonResult LargeJson(object data) { return new System.Web.Mvc.JsonResult() { Data = data, MaxJsonLength = Int32.MaxValue, }; } public JsonResult LargeJson(object data,JsonRequestBehavior behavior) { return new System.Web.Mvc.JsonResult() { Data = data, JsonRequestBehavior = behavior, MaxJsonLength = Int32.MaxValue }; }
具體網址:http://stackoverflow.com/questions/4155014/json-asp-net-mvc-maxjsonlength-exception
說道這里不得不感嘆一下
很多技術問題,百度出來的結果實在沒有人家國外的牛,以后遇到的技術問題還是google點
