在我的一个控制器操作中,我返回了一个非常大的JsonResult
来填充网格。
我收到以下InvalidOperationException
异常:
使用JSON JavaScriptSerializer进行序列化或反序列化时出现错误。字符串的长度超过了在maxJsonLength属性上设置的值。
遗憾的是,将web.config
中的maxJsonLength
属性设置为更高的值不会显示任何效果。
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644"/>
</webServices>
</scripting>
</system.web.extensions>
我不想像this中提到的那样将它作为字符串传回,所以请回答。
在我的研究中,我偶然看到了this的博客文章,其中建议编写一个自己的ActionResult
(例如LargeJsonResult : JsonResult
)来绕过这种行为。
那么,这是唯一的解决方案吗?
这是ASP.NET MVC中的一个bug吗?
我是不是遗漏了什么?
任何帮助都将不胜感激。
发布于 2012-12-20 04:57:12
这似乎已经在MVC4中得到了修复。
你可以这样做,这对我来说效果很好:
public ActionResult SomeControllerAction()
{
var jsonResult = Json(veryLargeCollection, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
发布于 2012-03-30 02:47:12
您也可以使用ContentResult
作为suggested here而不是JsonResult
的子类化。
var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue, RecursionLimit = 100 };
return new ContentResult()
{
Content = serializer.Serialize(data),
ContentType = "application/json",
};
发布于 2011-04-17 21:56:28
不幸的是,web.config设置为ignored by the default JsonResult implementation。所以我猜你需要实现一个定制的json结果来解决这个问题。
https://stackoverflow.com/questions/5692836
复制相似问题