一尘不染

我可以在web.config中为maxJsonLength设置无限长度吗?

json

我正在使用jQuery的自动完成功能。当我尝试检索超过17000条记录的列表(每条记录的长度不超过10个字符)时,它超出了长度,并引发错误:

异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON
JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了在maxJsonLength属性上设置的值。

我可以为maxJsonLengthin 设置无限长度web.config吗?如果没有,我可以设置的最大长度是多少?


阅读 333

收藏
2020-07-27

共2个答案

一尘不染

注意:
此答案仅适用于Web服务,如果要从Controller方法返回JSON,请确保还阅读以下SO答案:https


所述MaxJsonLength属性不能是无限的,是整数属性默认为102400(10万)。

您可以MaxJsonLength在web.config上设置属性:

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="50000000"/>
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration>
2020-07-27
一尘不染

如果您使用的是MVC 4,请确保也检查出此答案。

如果您仍然收到错误:

maxJsonLength在web.config 中将属性设置为其最大值之后
并且您知道数据的长度小于此值
并且您没有将Web服务方法用于JavaScript序列化
您的问题可能是:

MaxJsonLength属性的值仅适用于内部JavaScriptSerializer实例,异步通信层使用该实例来调用Web服务方法。(MSDN:ScriptingJsonSerializationSection.MaxJsonLength属性)

基本上,“内部” JavaScriptSerializer尊重maxJsonLength从Web方法调用时的值;直接使用的一个JavaScriptSerializer(或使用通过MVC行动的方法/控制器)不不尊重maxJsonLength属性,至少没有从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;
2020-07-27