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;
...
...