3

我在给您写信时出现网站错误:使用 JSON JavaScriptSerializer 进行序列化或反序列化期间出错。字符串的长度超过了 maxJsonLength 属性上设置的值。

使用的技术:C#,。NET FW 4.5、ASP.NET MVC4 和 Lint to SQL、Kendo UI(显示结果的网格)。

我想返回(就 Json 而言)一大组数据 - 实际上我有 50,000 条记录(不会出现超过 250,000 条记录)

我尝试放大 maxJsonLength 并在 web.config 中启用压缩 - 出现同样的错误:

  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="10485760"/>
      </webServices>
      <scriptResourceHandler enableCompression="true" enableCaching="true"/>
    </scripting>
  </system.web.extensions>

接下来我尝试在 C# 类中重写返回方法 - 相同的错误:a)默认

public JsonResult GetResult()
{
  // execute query for get result
  var myBigData = from ......
      select new
      {
          .......
      };

  // return result
  return this.Json(myBigData, JsonRequestBehavior.AllowGet);
}

b)重写(仍然错误)

public JsonResult GetResult()
{
  // execute query for get result
  var myBigData = from ......
      select new
      {
          .......
      };

  // return result
  var jsonResult = Json(myBigData, JsonRequestBehavior.AllowGet);
  jsonResult.MaxJsonLength = int.MaxValue;
  return jsonResult;
}

为了消除错误,我尝试了少量数据 - 一切正常:测试正确:6999 个项目中的 1 - 10 个

最好的问候,彼得

注意:不幸的是,我经历了很多讨论(这里),但没有成功,所以对于任何重复的话题,我深表歉意。

4

1 回答 1

5

似乎值 fromweb.config忽略了,根据文档,您必须显式创建一个实例JavascriptSerializer

public ContentResult GetResult() 
{
    var serializer = new JavaScriptSerializer();
    serializer.MaxJsonLength = Int32.MaxValue;
    var result = new ContentResult();
    result.Content = serializer.Serialize(data);
    result.ContentType = "text/json";
    return result;
}

至少它对我有用:)

于 2013-03-08T23:02:15.667 回答