JavaScriptSerializer.MaxJsonLength превышен. Как лучше всего справляться с этим?

Я получил большой объем данных, которые я отправляю клиенту с помощью функции jQuery $ .ajax (). Я вызываю метод в веб-службе ASP.NET, который возвращает данные JSON. Все отлично подходит для большинства поисков, но когда я получаю большой набор данных для возврата, я сталкиваюсь с проблемой со свойством JavaScriptSerializer MaxJsonLength. Какова лучшая практика для обработки этого? Я не хочу просто произвольно устанавливать максимальную длину. Могу ли я установить MaxJsonLength в веб-сервисе, если возвращаемые данные больше текущего максимума, или я должен перезаписать и отправить клиенту фрагменты данных?

Вот соответствующий фрагмент веб-службы:

<code>Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>();
//add some data to the dictionary...
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs);
</code>

Ответы на вопрос(5)

Решение Вопроса

вызываемых из клиентского скрипта, - через файл web.config (ниже). Какова ваша проблема с настройкой этого? Я делал бы это каждый раз через несколько вызовов xhr для потоковой передачи части данных.

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

ОБНОВЛЕНИЕ: размер по умолчанию - 2097152, что эквивалентно 4 МБ строковых данных Юникода. Вы действительно собираетесь отправить столько данных обратно клиенту? Если да, то вам, возможно, придется взглянуть на дизайн приложения, так как пользовательский интерфейс будет медленным и громоздким.

 25 июн. 2009 г., 22:30
ваш вопрос гласил: «Я не хочу просто произвольно устанавливать максимальную длину». Я предполагал, что вы имели в виду в файле web.config.
 31 июл. 2012 г., 16:12
Мне пришлось изменить это значение, и мои данные были только 100 КБ. Поэтому я не думаю, что по умолчанию установлено значение 4 МБ.
 Tim Scarborough25 июн. 2009 г., 22:28
У меня нет проблем с настройкой максимальной длины в файле web.config. Мне было интересно, если это лучшая практика. Я хочу защитить себя от случаев, когда может быть больше данных, чем указана максимальная длина.
 Tim Scarborough26 июн. 2009 г., 13:40
Извините за путаницу. Я не знаю максимальный размер моих данных. Я думаю, что я не буду использовать объект JavascriptSerializer.

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

и в вашем коде c #:

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

которое может содержать целое число - 2147483647

етствии сэто сообщение на форуме.

Я еще не потратил времени на оптимизацию возвращаемых данных (я сделаю это прежде, чем кто-либо их увидит), - но с этим установленным значением IE начал предоставлять мне сценарий на странице, который занимает слишком много времени. Вы хотите убить это & apos; сообщение.

Решение состоит в том, чтобы разделить данные на части - кто-нибудь знает хороший способ сделать это (в идеале в jQuery)? Конечно, я мог бы просто сделать еще один вызов ajax в обработчике успеха.

2147483647  правильное значение для использования. Просто, чтобы избежать путаницы в коде, вы можете использовать что-то вроде

JsonSerializer.MaxJsonLength = Int32.MaxValue;

Ваш ответ на вопрос