16

jQuery の $.ajax() 関数を使用して大量のデータをクライアントに送信しています。JSON データを返す ASP.NET Web サービスのメソッドを呼び出しています。ほとんどの検索ではすべてが優れていますが、返すデータ セットが大きい場合、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);
4

5 に答える 5

35

クライアント スクリプトから呼び出される Web メソッドの最大長を設定する唯一の方法は、web.config ファイル (下記) を使用することです。これを設定する際の問題は何ですか?データの一部をストリーミングするために、複数の xhr 呼び出しで毎回これを行います。

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

更新: デフォルトのサイズは 2097152 で、これは 4 MB の Unicode 文字列データに相当します。本当にそんなに多くのデータをクライアントに送り返すつもりですか? もしそうなら、ユーザーエクスペリエンスが遅くて面倒になるので、アプリのデザインを見る必要があるかもしれません.

于 2009-06-25T20:23:48.480 に答える
11

2147483647 使用する正しい値です。コードの混乱を避けるために、次のようなものを使用できます

var JsonSerializer = new JavaScriptSerializer();
JsonSerializer.MaxJsonLength = Int32.MaxValue;
于 2012-08-27T21:42:30.473 に答える
5

このフォーラムの投稿によると、このプロパティの最大値は 2147483647です。

返されるデータの最適化にはまだ時間をかけていません (誰かに見られる前に実行します)。しかし、この値を設定すると、IE から「ページ上のスクリプトに時間がかかりすぎています」というメッセージが表示されるようになりました。それを殺したい」というメッセージ。

解決策は、データをチャンクすることです-これを行うための良い方法を知っている人はいますか(理想的にはjQueryで)? もちろん、成功ハンドラーで別の ajax 呼び出しを行うこともできます。

于 2010-07-21T09:24:03.840 に答える
3

最大許容長は、Integer が保持できる最大値であり、たまたま - 2147483647 です。

于 2013-09-04T08:39:57.543 に答える
0

このスニペットを web.config に追加します。

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

そしてあなたのC#コードで:

 JavaScriptSerializer jss = new JavaScriptSerializer();
 jss.MaxJsonLength = Int32.MaxValue;
 ...
 ...
于 2016-06-06T16:27:03.777 に答える