【问题标题】:JavaScriptSerializer.MaxJsonLength exceeded. What's the best practice for handling this?超出 JavaScriptSerializer.MaxJsonLength。处理此问题的最佳做法是什么?
【发布时间】:2010-11-05 23:15:26
【问题描述】:

我使用 jQuery 的 $.ajax() 函数将大量数据发送到客户端。我在 ASP.NET Web 服务中调用一个返回 JSON 数据的方法。对于大多数搜索来说,一切都很好,但是当我要返回一个大数据集时,我遇到了 JavaScriptSerializer MaxJsonLength 属性的问题。处理此问题的最佳做法是什么?我不想随意设置最大长度。如果返回的数据大于当前的最大值,我可以在 Web 服务中设置 MaxJsonLength,还是应该重写并将数据块发送给客户端?

这是来自网络服务的相关 sn-p:

Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>();
//add some data to the dictionary...
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);

【问题讨论】:

    标签: asp.net json web-services javascriptserializer


    【解决方案1】:

    设置从客户端脚本调用的 Web 方法的最大长度的唯一方法是通过 web.config 文件(如下)。 你设置这个有什么问题? 每次我都会通过多次 xhr 调用来流式传输部分数据。

    <system.web.extensions>
      <scripting>
          <webServices>
            <jsonSerialization maxJsonLength="500000">
            </jsonSerialization>
          </webServices>
      </scripting>
    </system.web.extensions>
    

    更新:默认大小为 2097152,相当于 4 MB 的 Unicode 字符串数据。您真的要将这么多数据发送回客户端吗?如果是这样,您可能需要查看应用程序设计,因为用户体验会很慢而且很麻烦。

    【讨论】:

    • 我在 web.config 中设置最大长度没有问题。我想知道这是否是最佳做法。我想保护自己免受数据可能超过我指定的最大长度的情况。
    • 啊,您的问题是“我不想随意设置最大长度”,我认为您的意思是在 web.config 中。
    • 很抱歉给您带来了困惑。我不知道我的数据可能的最大大小。我想我会考虑不使用 JavascriptSerializer 对象。
    • 我不得不更改这个值,我的数据只有 100KB。所以我不认为默认是 4MB。
    【解决方案2】:

    2147483647 是要使用的正确值。为了避免代码混淆,您可以使用类似

    var JsonSerializer = new JavaScriptSerializer();
    JsonSerializer.MaxJsonLength = Int32.MaxValue;
    

    【讨论】:

      【解决方案3】:

      根据this forum post,此属性的最大值为2147483647。

      我还没有花时间优化我返回的数据,但是(我会在任何人看到它之前这样做) - 但是设置了这个值,IE 已经开始给我“页面上的脚本也在占用”多久你想杀了它的消息。

      解决方案是将数据分块 - 有谁知道这样做的好方法(理想情况下在 jQuery 中)?当然,我可以在成功处理程序中进行另一个 ajax 调用。

      【讨论】:

        【解决方案4】:

        最大允许长度是整数可以容纳的最大值,恰好是 - 2147483647

        【讨论】:

          【解决方案5】:

          将此 sn-p 添加到 web.config :

          <system.web.extensions>
          <scripting>
            <webServices>
              <jsonSerialization maxJsonLength="2147483647"/>
            </webServices>
          </scripting>
          

          在你的 c# 代码中:

           JavaScriptSerializer jss = new JavaScriptSerializer();
           jss.MaxJsonLength = Int32.MaxValue;
           ...
           ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-08
            • 1970-01-01
            相关资源
            最近更新 更多