JavaScriptSerializer的MaxJsonLength超出限制。如何处理这种情况是最佳实践?

17
我正在使用jQuery的$.ajax()函数向客户端发送大量数据。我调用了一个在ASP.NET Web服务中返回JSON数据的方法。对于大多数搜索来说一切都很顺利,但是当我需要返回大量数据时,会遇到JavaScriptSerializer MaxJsonLength属性的问题。处理这种情况的最佳实践是什么?我不想仅仅任意地设置一个最大长度。如果返回的数据超过了当前最大值,我可以在Web服务中设置MaxJsonLength吗?还是应该重新编写代码并向客户端发送分块数据? 以下是来自Web服务的相关片段:
Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>();
//add some data to the dictionary...
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);
5个回答

37

设置从客户端脚本调用的 Web 方法的最大长度的唯一方法是通过 web.config 文件(如下)。 你对此设置有什么问题吗? 我会在多个 xhr 调用中每次执行此操作,以流式传输数据的部分。

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

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


1
我在web.config中设置最大长度没有问题。但我想知道这是否是最佳实践。我希望能够保护自己免受超出我指定的最大长度的数据情况的影响。 - Tim Scarborough
啊,你的问题中提到了“我不想随意设置最大长度”,我猜你是指在 web.config 文件中。 - redsquare
抱歉造成困扰。我不知道我的数据可能会有多大,我想我会考虑不使用JavascriptSerializer对象。 - Tim Scarborough
6
我需要更改这个值,而我的数据只有100KB。因此我认为默认值不是4MB。 - Terry

13

2147483647是正确的值。为了避免代码混乱,你可以使用类似以下方式:

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

5

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

我还没有花时间优化返回的数据(在任何人看到之前我会这样做的)——但是设置了这个值后,IE开始给我显示“页面上的脚本正在运行太长时间,是否要终止它”的消息。

一种解决办法是将数据分块——有人知道一个好的方法来实现这个吗(最好使用jQuery)?当然,我也可以在成功处理程序中进行另一个ajax调用。


3

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


1
将此代码片段添加到 web.config 文件中:
<system.web.extensions>
<scripting>
  <webServices>
    <jsonSerialization maxJsonLength="2147483647"/>
  </webServices>
</scripting>

在你的C#代码中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接