【问题标题】:Confusion over maxJsonLength default value对 maxJsonLength 默认值的混淆
【发布时间】:2011-01-08 07:37:36
【问题描述】:

我希望对 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 字节,但我不确定其他默认值的原因。

【问题讨论】:

    标签: asp.net json configuration


    【解决方案1】:

    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】:

      在网站上创建一个页面,代码如下:

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

      导致输出:

      最大长度:2097152

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

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

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

      【讨论】:

      • 因此,如果您以编程方式创建序列化程序,则它使用默认值 2097152,但如果您只是通过 AXAX 请求检索 JSON 数据,则默认值为 102400 字节。感谢您的意见,但我仍然不清楚为什么会出现这种差异。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        相关资源
        最近更新 更多