代码之家  ›  专栏  ›  技术社区  ›  Tim Scarborough

超过了javascriptserializer.maxjsonlength。处理这个的最佳实践是什么?

  •  15
  • Tim Scarborough  · 技术社区  · 15 年前

    我使用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 回复  |  直到 8 年前
        1
  •  32
  •   redsquare    15 年前

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

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

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

        2
  •  10
  •   Jonatan Philippe    12 年前

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

    var JsonSerializer = new JavaScriptSerializer();
    JsonSerializer.MaxJsonLength = Int32.MaxValue;
    
        3
  •  5
  •   Ian Grainger David Morton    14 年前

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

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

    一种解决方案是将数据分块——有人知道一种很好的方法来实现这一点吗(理想情况下,在jquery中)?当然,我可以在成功处理程序中执行另一个Ajax调用。

        4
  •  3
  •   user2704583    11 年前

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

        5
  •  0
  •   Amit    8 年前

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

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

    在您的C代码中:

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