繁体   English   中英

超出了JavaScriptSerializer.MaxJsonLength。处理此问题的最佳做法是什么?

[英]JavaScriptSerializer.MaxJsonLength exceeded. What's the best practice for handling this?

我使用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);

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

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

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

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

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

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

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

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

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

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

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

在你的c#代码中:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM