3

Web サイトでエラーが発生しました。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# クラスの return メソッドを書き直してみます - 同じエラーで: a) デフォルト

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

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

b) rewriten (まだエラー)

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

from の値は無視されているようで、ドキュメントweb.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 に答える