ASP.NET MVC4 Ошибка при сериализации или десериализации JSON - большие данные
Я пишу вам с ошибкой на веб-сайте: ошибка во время сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength.
Используемые технологии: C #,. NET FW 4.5, ASP.NET MVC4 и Lint to SQL, пользовательский интерфейс Kendo (сетка для отображения результатов).
Я хотел бы вернуть (с точки зрения Json) большой набор данных - на самом деле у меня есть 50 000 записей (более 250 000 записей не будет)
Я пытаюсь увеличить maxJsonLength и в будущем включить сжатие в web.config - с той же ошибкой:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="10485760"/>
</webServices>
<scriptResourceHandler enableCompression="true" enableCaching="true"/>
</scripting>
</system.web.extensions>
Затем я пытаюсь переписать метод возврата в классе C# - с той же ошибкой: а) по умолчанию
public JsonResult GetResult()
{
// execute query for get result
var myBigData = from ......
select new
{
.......
};
// return result
return this.Json(myBigData, JsonRequestBehavior.AllowGet);
}
б) переписать (все еще ошибка)
public JsonResult GetResult()
{
// execute query for get result
var myBigData = from ......
select new
{
.......
};
// return result
var jsonResult = Json(myBigData, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
Чтобы устранить ошибки, я пробовал меньшее количество данных - все правильно: тест, который является правильным: 1 - 10 из 6999 пунктов
С наилучшими пожеланиями, Питер
Примечание: К сожалению, я прошел много дискуссий (здесь), но безуспешно, поэтому я прошу прощения за любую дублирующую тему.
1 ответ
Кажется, что значение от web.config
игнорируется, и в соответствии с документацией вы должны явно создать экземпляр JavascriptSerializer
public ContentResult GetResult()
{
var serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
var result = new ContentResult();
result.Content = serializer.Serialize(data);
result.ContentType = "text/json";
return result;
}
По крайней мере, у меня это работает:)