JSON, ASP.NET MVC - исключение MaxJsonLength - PullRequest
7 голосов
/ 11 ноября 2010

Я просто пытаюсь перевести некоторые числа, разделенные запятыми, на внешний интерфейс:

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetSquares()
{
 var result = new JsonResult();
 result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
IList<double> list = new List<double>();
...
result.Data = list;
return result;
}

Это прекрасно работает, если только несколько цифр. К сожалению, мне иногда приходится сдвигать много чисел и получить исключение MaxJsonLength. Я попробовал несколько предложений, чтобы преодолеть это (добавить что-то в файл web.config и т. Д.). Может быть, мне не нужно использовать JSON в конце концов? Однако я все еще «должен что-то делать» с числами, используя JavaScript. В данный момент я использую JQuery AJAX.

Любые предложения приветствуются ...

Ответы [ 4 ]

6 голосов
/ 29 марта 2012

Вот еще один пользовательский JsonResult (CorrectJsonResult) , который обрабатывает большие пределы сериализации, чем стандартные 4 МБ, разрешенные JavascriptConverter.

И еще один пример, который использует ContentResult вместо JsonResult подкласса.

public ActionResult GetLargeJsonResult()
{
  return new ContentResult
  {
    Content = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(myBigdata),
    ContentType = "application/json"
  };
}
4 голосов
/ 23 января 2014

Я расширил базовый класс Controller и отлично работал:

Класс ControllerExtensions:

namespace SCAWEB.Helpers
{
    public static class ControllerExtensions
    {
        #region Json
        public static int MaxJsonLength{get;set;}

        static ControllerExtensions()
        {
            MaxJsonLength = 2147483644;
        }

        public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data)
        {
            return new System.Web.Mvc.JsonResult()
            {
                Data = data,
                MaxJsonLength = MaxJsonLength,
            };
        }
        public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data, System.Web.Mvc.JsonRequestBehavior behavior)
        {
            return new System.Web.Mvc.JsonResult()
            {
                Data = data,
                JsonRequestBehavior = behavior,
                MaxJsonLength = MaxJsonLength
            };
        }
        //TODO: You can add more overloads, the controller class has 6 overloads
        #endregion
    }
}

Класс MyController:

using SCAWEB.Helpers;

namespace SCAWEB.Controllers
{
    public class VentasController : Controller
    {
        public ActionResult VentasList (){
            //Todo: All the action code

            //return this.Json(myData);
            return this.LargeJson(myData);//Here I use my extensions
        }
    }
}

Вы можете указать максимальную длину в своем коде:

ControllerExtensions.MaxJsonLength = 1073741824;//1GB
3 голосов
/ 28 февраля 2012
1 голос
/ 11 ноября 2010

Это не сработает?

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="2147483644"/>
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration> 

Если нет, может быть, вы можете просто передать его обратно в виде строки ...

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetSquares()
{
    IList<double> list = new List<double>();
    ....
    return Content(string.Join(",", list));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...