我可以为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 ,请务必查看此答案。


如果您仍然收到错误:

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

    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