16

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

这是来自网络服务的相关片段:

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

5 回答 5

35

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

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

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

于 2009-06-25T20:23:48.480 回答
11

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

var JsonSerializer = new JavaScriptSerializer();
JsonSerializer.MaxJsonLength = Int32.MaxValue;
于 2012-08-27T21:42:30.473 回答
5

根据此论坛帖子,此属性的最大值为 2147483647 。

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

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

于 2010-07-21T09:24:03.840 回答
3

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

于 2013-09-04T08:39:57.543 回答
0

将此代码段添加到 web.config :

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

并在您的 c# 代码中:

 JavaScriptSerializer jss = new JavaScriptSerializer();
 jss.MaxJsonLength = Int32.MaxValue;
 ...
 ...
于 2016-06-06T16:27:03.777 回答