对maxJsonLength默认值的困惑

时间:2010-01-22 17:34:38

标签: asp.net json configuration

我希望能对maxJsonLength属性做一些澄清。这是一些背景信息。

我遇到的问题是,使用jQuery在.NET Web应用程序中没有返回AJAX响应。当用户更改下拉列表时,我手动构建并显示了一些HTML。问题是一个特定的选择返回了一个大约140kB的字符串,但它不会显示在浏览器中。我将问题缩小到字符串的长度太长。在搜索SO和其他地方时,我发现问题可以通过我的web.config中的manually setting the value of maxJsonLength来解决。

我的困惑是关于maxJsonLength属性的默认值。一些答案说这是2097152个字符和参考this MSDN link。但是其他人说默认长度是102400并且引用this other MSDN link。在我的测试中,我得出的结论是默认值是102400字节,但我不确定其他默认值的原因。

3 个答案:

答案 0 :(得分:5)

在网站上创建一个页面,后面的代码中包含以下内容:

JavaScriptSerializer serializer = new JavaScriptSerializer();

Response.Write("Max Length: " + serializer.MaxJsonLength);

导致输出:

  

最大长度:2097152

所以我会使用docs中定义的值而不是How to。

但请注意,这是字符,而不是明确的字节:

  

默认值为2097152个字符,相当于4 MB的Unicode字符串数据

答案 1 :(得分:4)

MaxJsonLength有两个默认值,具体取决于JavaScriptSerializer的创建方式。

2 097 152

直接创建序列化程序时为2097152。相关代码是:

public class JavaScriptSerializer {
    ...
    internal const int DefaultMaxJsonLength = 2097152;        
    ...
    public JavaScriptSerializer(...) {
        ...
        MaxJsonLength = DefaultMaxJsonLength;
    }
}

102 400

当ASP.NET MVC(或更早版本)创建序列化程序时,它是102400。相关代码是:

public sealed class ScriptingJsonSerializationSection : ConfigurationSection {
    ...
    private static readonly ConfigurationProperty _propMaxJsonLength =
        new ConfigurationProperty("maxJsonLength",
                                    typeof(int),
                                    102400,
                                    ...);
    ...
    [ConfigurationProperty("maxJsonLength", DefaultValue = 102400)]
    public int MaxJsonLength { ... }
    ...
}

有几个地方为此值分配serializer.MaxJsonLength - 所有这些都在与ASP.NET相关的代码中。

答案 2 :(得分:0)

我遇到了类似的问题,从Web服务返回JSON。我将web.config中的maxJsonLength设置为足以处理我发回的数据的值。