我正在使用jQuery的自动完成功能。当我尝试检索超过17000条记录的列表(每条记录的长度不超过10个字符)时,它超出了长度,并引发错误:
异常信息: 异常类型:InvalidOperationException 异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了在maxJsonLength属性上设置的值。
我可以为maxJsonLengthin 设置无限长度web.config吗?如果没有,我可以设置的最大长度是多少?
maxJsonLength
web.config
注意: 此答案仅适用于Web服务,如果要从Controller方法返回JSON,请确保还阅读以下SO答案:https
所述MaxJsonLength属性不能是无限的,是整数属性默认为102400(10万)。
您可以MaxJsonLength在web.config上设置属性:
MaxJsonLength
<configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions> </configuration>
如果您使用的是MVC 4,请确保也检查出此答案。
如果您仍然收到错误:
maxJsonLength在web.config 中将属性设置为其最大值之后 并且您知道数据的长度小于此值 并且您没有将Web服务方法用于JavaScript序列化 您的问题可能是:
MaxJsonLength属性的值仅适用于内部JavaScriptSerializer实例,异步通信层使用该实例来调用Web服务方法。(MSDN:ScriptingJsonSerializationSection.MaxJsonLength属性)
(MSDN:ScriptingJsonSerializationSection.MaxJsonLength属性)
基本上,“内部” JavaScriptSerializer尊重maxJsonLength从Web方法调用时的值;直接使用的一个JavaScriptSerializer(或使用通过MVC行动的方法/控制器)不不尊重maxJsonLength属性,至少没有从systemWebExtensions.scripting.webServices.jsonSerializationweb.config中的部分。
JavaScriptSerializer
systemWebExtensions.scripting.webServices.jsonSerializationweb.config
解决方法是,您可以在Controller内(或实际上在任何地方)执行以下操作:
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;