关于大JSON 的问题的解决方式

ASP.NET MVC JSON 大数据异常提示JSON 字符串超出限制的异常问题

今天客户忽然过来找我说在后台添加了一篇超长的文章后,全部后台的文章都显示不出来了。后台的前端显示是用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的大小web

运行正常,可是问题依旧还在,并且无论maxJsonLength设置成多大都无效ajax

没办法,只能继续搜索查找资料了。json

原来MVC框架内置的JsonResult代码中,在使用JavaScriptSerializer时,都是采用的默认值,没有从maxJsonLength读取值,即忽略了这个配置。框架

最后在stackoverflow上找到了答案post

在控制器中添加两个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
            };
}
复制代码
相关文章
相关标签/搜索