我可以为web.config中的maxJsonLength设置无限长度吗?
我正在使用jQuery的自动完成功能。 当我尝试检索超过17000条记录的列表(每个记录不会超过10个字符长度)时,它会超出长度并引发错误:
异常信息:
异常类型:InvalidOperationException
异常消息:在使用JSON JavaScriptSerializer进行序列化或反序列化期间出错。 字符串的长度超过maxJsonLength属性中设置的值。
我可以为web.config
maxJsonLength
设置无限长度吗? 如果不是,我可以设置的最大长度是多少?
注:此答案仅适用于Web服务,如果您要从Controller方法返回JSON,请确保您阅读以下SO答案以及:https://stackoverflow.com/a/7207539/1246870
MaxJsonLength属性不能无限制,是一个默认为102400(100k)的整数属性。
您可以在web.config上设置MaxJsonLength属性:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
如果您使用的是MVC 4 ,请务必查看此答案。
如果您仍然收到错误:
maxJsonLength
属性设置为其最大值之后 你的问题可能是:
MaxJsonLength属性的值仅适用于由异步通信层用来调用Web服务方法的内部JavaScriptSerializer实例。 (MSDN:ScriptingJsonSerializationSection.MaxJsonLength属性)
基本上,“内部” JavaScriptSerializer
在从web方法调用时尊重maxJsonLength
的值; 直接使用的JavaScriptSerializer
(或经由MVC行动的方法/控制器使用) 不尊重maxJsonLength
从属性,至少不是systemWebExtensions.scripting.webServices.jsonSerialization
的web.config的部分。
作为一种解决方法,您可以在您的控制器(或其他任何地方)中执行以下操作:
var serializer = new JavaScriptSerializer();
// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;
var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
Content = serializer.Serialize(resultData),
ContentType = "application/json"
};
return result;
这个答案是我对这个asp.net论坛答案的解释。
在MVC 4中,你可以这样做:
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new JsonResult()
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior,
MaxJsonLength = Int32.MaxValue
};
}
在你的控制器中。
链接地址: http://www.djcxy.com/p/7251.html上一篇: Can I set an unlimited length for maxJsonLength in web.config?
下一篇: Issue with Query String Parameter Length. Http Error 400