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

По крайней мере, у меня это работает:)

Другие вопросы по тегам