Длина строки превышает значение, заданное для свойства maxJsonLength
Я загружаю данные контента вклада с помощью jQuery ajax
post method через веб-метод с 200-300 записями. И получить следующую ошибку в консоли:
Ошибка: Sys.Net.WebServiceFailedException: Sys.Net.WebServiceFailedException: System. InvalidOperationException-- Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, заданное для свойства maxJsonLength.
Изменение длины атрибута maxJsonLength
в maxJsonLength
Web.config не помогает.
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644" />
</webServices>
</scripting>
</system.web.extensions>
</configuration>
Может ли кто-нибудь помочь мне решить эту проблему?
Ответы
Ответ 1
JavaScriptSerialzer имеет общедоступное свойство с именем MaxJsonLength согласно
http://msdn.microsoft.com/en-us/library/system.web.configuration.scriptingjsonserializationsection.maxjsonlength.aspx
Теперь, когда вы десериализируете свой json, используйте этот
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue; //Or any size you want to use, basically int maxValue is 2GB, you shouldn't need this big json string to deserialize, else you are doing it wrong.
myObject obj = serializer.Deserialize<myObject>(yourJsonString);
И это должно сработать отлично, я недавно понял это через msdn и решил проблему, которая долго искала меня.
Ответ 2
Я знаю, что это очень старый поток во время моего чтения, и что WebMethod на самом деле не является частью ASP.NET MVC, поэтому это несколько касательно. Но, если кто-то столкнется с ним -
Если вы используете ASP.NET MVC, существует альтернатива непосредственному вызову JavaScriptSerializer
, которая заключается в инициализации JsonResult
и установке свойства MaxJsonLength
в самом результате:
private JsonResult GetReallyBigJsonResult(object data, JsonRequestBehavior requestBehavior)
{
return new JsonResult()
{
ContentEncoding = Encoding.Default,
ContentType = "application/json",
Data = data,
JsonRequestBehavior = requestBehavior,
MaxJsonLength = int.MaxValue
};
}
Ответ 3
Не знаете размер вашей строки, но, возможно, она все еще превышает установленный максимальный предел?
В идеале сценарии ajax предназначены только для небольших и средних серверных вызовов не для получения тонны данных, и если вы получаете много данных, используя асинхронный запрос, тогда вы просите о проблемах.
Смотрите здесь для альтернативного