Я использую функцию автозаполнения JQuery. Когда я пытаюсь получить список из более чем 17000 записей (каждая не будет иметь длину более 10 символов), он превышает длину и выдает ошибку:
Информация об
исключении: Тип
исключения : InvalidOperationException Сообщение об исключении: Ошибка во время сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength.
Могу ли я установить неограниченную длину для maxJsonLength
in web.config
? Если нет, какую максимальную длину я могу установить?
asp.net
asp.net-mvc
json
Прасад
источник
источник
Ответы:
ПРИМЕЧАНИЕ. Этот ответ применим только к веб-службам. Если вы возвращаете JSON из метода Controller, обязательно прочитайте также этот ответ SO ниже: https://stackoverflow.com/a/7207539/1246870
Свойство MaxJsonLength не может быть неограниченным, это целочисленное свойство, по умолчанию 102400 (100k).
Вы можете установить
MaxJsonLength
свойство в вашем web.config:источник
2147483647
@depsart и @ Descár.return Json()
или чего-то ещеЕсли вы используете MVC 4 , обязательно ознакомьтесь с этим ответом .
Если вы все еще получаете сообщение об ошибке:
maxJsonLength
свойства в его максимальное значение в web.configВаша проблема, вероятно, в том, что:
По сути, «внутренний»
JavaScriptSerializer
учитывает значениеmaxJsonLength
при вызове из веб-метода; непосредственное использованиеJavaScriptSerializer
(или использование через MVC действие-метод / Controller) не не соблюдатьmaxJsonLength
свойство, по крайней мере , не изsystemWebExtensions.scripting.webServices.jsonSerialization
секции web.config.В качестве обходного пути вы можете сделать следующее в вашем контроллере (или в любом другом месте):
Этот ответ является моей интерпретацией этого ответа на форуме asp.net .
источник
Json()
метод результата действия в asp.net mvc.В MVC 4 вы можете сделать:
в вашем контроллере.
Дополнение:
Для любого, озадаченного параметрами, которые вам нужно указать, вызов может выглядеть так:
источник
Вы можете настроить максимальную длину для запросов json в вашем файле web.config:
Значение по умолчанию для maxJsonLength составляет 102400 . Дополнительные сведения см. На этой странице MSDN: http://msdn.microsoft.com/en-us/library/bb763183.aspx.
источник
если после настройки web.config вы все еще получаете сообщение об ошибке:
Я решил это следующим образом:
Я надеюсь, что это должно помочь.
источник
У меня была эта проблема в ASP.NET Web Forms. Он полностью игнорировал настройки файла web.config, поэтому я сделал это:
Конечно, в целом это ужасная практика. Если вы отправляете столько данных в вызове веб-службы, вам следует рассмотреть другой подход.
источник
Я починил это.
Это работает очень хорошо.
источник
Я последовал за ответом Вестигала и пришел к этому решению:
Когда мне нужно было отправить большой json в действие в контроллере, я получал знаменитую «Ошибка при десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength. \ R \ nПараметр name: input провайдер стоимости ".
Я создал новую ValueProviderFactory LargeJsonValueProviderFactory и установил MaxJsonLength = Int32.MaxValue в методе GetDeserializedObject.
Затем в методе Application_Start из Global.asax.cs замените ValueProviderFactory новым:
источник
если после внедрения вышеуказанного дополнения в ваш web.config вы получите «Нераспознанный раздел конфигурации system.web.extensions». Ошибка, затем попробуйте добавить это в ваш web.config в
<ConfigSections>
разделе:источник
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, как видно на этой странице: forums.asp.net/t/1446510.aspx/1Вы можете написать эту строку в контроллер
Вы также можете написать эту строку в
web.config
`
Чтобы быть в безопасности, используйте оба.
источник
Если вы получаете эту ошибку от MiniProfiler в MVC, вы можете увеличить значение, установив для свойства
MiniProfiler.Settings.MaxJsonResponseSize
желаемое значение. По умолчанию этот инструмент игнорирует значение, установленное в config.Предоставлено mvc-mini-profiler .
источник
Просто установите MaxJsonLength proprty в методе действия MVC
источник
Я предлагаю установить его в Int32.MaxValue.
источник
Как насчет атрибутов магии?
Затем вы можете применить его глобально, используя глобальную конфигурацию фильтра, или контроллер / действие.
источник
Вопрос в том, действительно ли вам нужно возвращать 17k записей? Как вы планируете обрабатывать все данные в браузере? В любом случае, пользователи не собираются прокручивать 17000 строк.
Лучший подход состоит в том, чтобы извлечь только несколько «верхних» записей и загрузить больше по мере необходимости.
источник
Вы можете установить его в конфигурации, как говорили другие, или вы можете установить его для отдельного экземпляра сериализатора, например:
источник
Для тех, у кого есть проблемы в MVC3 с JSON, который автоматически десериализуется для подшивки модели и является слишком большим, вот решение.
Спасибо http://blog.naver.com/techshare/100145191355 и https://gist.github.com/DalSoft/1588818 за указание в правильном направлении, как это сделать. Последняя ссылка на первом сайте содержит полный исходный код решения.
источник
Если вы столкнулись с подобного рода проблемами в View, вы можете воспользоваться приведенным ниже методом для их решения. Здесь я использовал пакет Newtonsoft .
источник
источник
Похоже, что нет «неограниченного» значения. По умолчанию используется 2097152 символа, что эквивалентно 4 МБ строковых данных Юникода.
Как уже отмечалось, 17 000 записей трудно хорошо использовать в браузере. Если вы представляете агрегированное представление, может быть гораздо эффективнее выполнить агрегацию на сервере и передавать только сводку в браузере. Например, рассмотрим браузер файловой системы, мы видим только верхнюю часть дерева, а затем отправляем дополнительные запросы по мере детализации. Количество записей, возвращаемых в каждом запросе, сравнительно мало. Представление в виде дерева может хорошо работать для больших наборов результатов.
источник
Просто столкнулся с этим. Я получаю более 6000 записей. Просто решил, что я просто сделаю пейджинг. Например, я принимаю номер страницы в моей конечной точке MVC JsonResult, который по умолчанию равен 0, поэтому в этом нет необходимости, например:
Тогда вместо того, чтобы сказать:
Я говорю:
Это очень просто Затем в JavaScript вместо этого:
Я вместо этого говорю:
И добавляйте свои записи к тому, что вы делали с ними в первую очередь. Или просто подождите, пока все вызовы не завершатся, и сопоставьте результаты.
источник
Я решил проблему, добавив этот код:
источник
string confString = HttpContext.Request.ApplicationPath.ToString(); var conf = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(confString); var section = (System.Web.Configuration.ScriptingJsonSerializationSection)conf.GetSection("system.web.extensions/scripting/webServices/jsonSerialization"); section.MaxJsonLength = int.MaxValue; conf.Save();
Альтернативный ASP.NET MVC 5 Fix:
(Шахта похожа на ответ МФЦ выше с небольшими изменениями)
Я еще не был готов перейти на Json.NET, и в моем случае во время запроса произошла ошибка. Лучшим подходом в моем сценарии была модификация фактического,
JsonValueProviderFactory
который применяет исправление к глобальному проекту и может быть сделан путем редактированияglobal.cs
файла как такового.добавьте запись web.config:
а затем создайте два следующих класса
Это в основном точная копия реализации по умолчанию, найденная в,
System.Web.Mvc
но с добавлением настраиваемого значения web.config appsettingaspnet:MaxJsonLength
.источник
Решение для WebForms UpdatePanel:
Добавьте параметр в Web.config:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
класс содержит следующий код:источник
Нам не нужны какие-либо изменения на стороне сервера. Вы можете исправить это только изменить файл web.config Это помогло мне. попробуй это
источник
использование
lib\Newtonsoft.Json.dll
источник
Исправление для ASP.NET MVC: если вы хотите исправить это только для конкретного действия, которое вызывает проблему, то код такой:
Вы можете изменить это:
И функциональность должна быть такой же, вы можете просто вернуть больший JSON в ответ.
Объяснение на основе исходного кода ASP.NET MVC: вы можете проверить, что
Controller.Json
метод делает в исходном коде ASP.NET MVCЭто вызывает другой
Controller.Json
метод:где прошло
contentType
иcontentEncoding
объектnull
. Так что в основном вызовreturn Json(object)
в контроллере эквивалентен вызовуreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Вы можете использовать вторую форму и параметризироватьJsonResult
.Так что же происходит, когда вы устанавливаете
MaxJsonLength
свойство (по умолчанию оно равно null)? Он передается вJavaScriptSerializer.MaxJsonLength
собственность , а затемJavaScriptSerializer.Serialize
метод называется :И когда вы не устанавливаете
MaxJsonLenght
свойство сериализатора, он принимает значение по умолчанию, которое составляет всего 2 МБ.источник
если это значение maxJsonLength равно int, то насколько велико его значение int 32-битное / 64-битное / 16-битное .... я просто хочу быть уверен, какое максимальное значение я могу установить в качестве maxJsonLength
источник
Вам не нужно делать с web.config. Вы можете использовать короткое свойство во время значения catch списка передачи. Например, объявите модель как
здесь я использую короткие пропорции, такие как BC = штрих-код BE = книжное издание и т. д.
источник