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

У меня есть большое количество данных, которые я отправляю клиенту с помощью функции 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);

Ответы

Ответ 1

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

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

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

Ответ 2

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

var JsonSerializer = new JavaScriptSerializer();
JsonSerializer.MaxJsonLength = Int32.MaxValue;

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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