JavaScriptSerializer.MaxJsonLength превышен. Как лучше всего справляться с этим? - PullRequest
15 голосов
/ 26 июня 2009

У меня большой объем данных, которые я отправляю клиенту с помощью функции $ .ajax () jQuery. Я вызываю метод в веб-службе 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 ]

33 голосов
/ 26 июня 2009

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

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

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

11 голосов
/ 28 августа 2012

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

var JsonSerializer = new JavaScriptSerializer();
JsonSerializer.MaxJsonLength = Int32.MaxValue;
5 голосов
/ 21 июля 2010

Максимальное значение для этого свойства - 2147483647 согласно этому сообщению на форуме .

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

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

3 голосов
/ 04 сентября 2013

Максимально допустимая длина - это максимальное значение, которое может содержать целое число, - 2147483647

0 голосов
/ 06 июня 2016

добавить этот фрагмент в web.config:

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

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

 JavaScriptSerializer jss = new JavaScriptSerializer();
 jss.MaxJsonLength = Int32.MaxValue;
 ...
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...