Вопрос по asp.net, json, web-services, jquery, javascript – JavaScriptSerializer.MaxJsonLength превышен. Как лучше всего справляться с этим?

15

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

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

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

Ваш Ответ

5   ответов
0

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

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

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

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

5

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

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

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

10

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

JsonSerializer.MaxJsonLength = Int32.MaxValue;
32

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

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

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

Мне пришлось изменить это значение, и мои данные были только 100 КБ. Поэтому я не думаю, что по умолчанию установлено значение 4 МБ.
У меня нет проблем с настройкой максимальной длины в файле web.config. Мне было интересно, если это лучшая практика. Я хочу защитить себя от случаев, когда может быть больше данных, чем указана максимальная длина. Tim Scarborough
Извините за путаницу. Я не знаю максимальный размер моих данных. Я думаю, что я не буду использовать объект JavascriptSerializer. Tim Scarborough
ваш вопрос гласил: «Я не хочу просто произвольно устанавливать максимальную длину». Я предполагал, что вы имели в виду в файле web.config.

Похожие вопросы