JavaScriptSerializer期间ASP.NET MVC中的MaxJsonLength异常

在我的一个控制器动作中,我返回一个非常大的JsonResult来填充网格。

我收到以下InvalidOperationException异常:

在使用JSON JavaScriptSerializer进行序列化或反序列化期间出错。 字符串的长度超过maxJsonLength属性中设置的值。

不幸的是,将web.configmaxJsonLength属性设置为更高的值不会产生任何影响。

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="2147483644"/>
    </webServices>
  </scripting>
</system.web.extensions>

我不想像这个SO回答中提到的那样将它作为字符串传递回去。

在我的研究中,我遇到了这篇博客文章,其中编写自己的ActionResult (例如LargeJsonResult : JsonResult )被推荐来绕过这种行为。

这是唯一的解决方案吗?
这是ASP.NET MVC中的错误吗?
我错过了什么吗?

非常感激任何的帮助。


看起来这已经在MVC4中修复了。

你可以做到这一点,这对我来说效果很好:

public ActionResult SomeControllerAction()
{
  var jsonResult = Json(veryLargeCollection, JsonRequestBehavior.AllowGet);
  jsonResult.MaxJsonLength = int.MaxValue;
  return jsonResult;
}

您也可以像这里建议的那样使用ContentResult而不是子类化JsonResult

var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue, RecursionLimit = 100 };

return new ContentResult()
{
    Content = serializer.Serialize(data),
    ContentType = "application/json",
};

不幸的是,web.config设置被默认的JsonResult实现忽略。 所以我想你需要实现一个自定义json结果来克服这个问题。

链接地址: http://www.djcxy.com/p/42053.html

上一篇: MaxJsonLength exception in ASP.NET MVC during JavaScriptSerializer

下一篇: how to gzip content in asp.net MVC?