Увеличьте json-ответ maxJsonLength в MVC 4

Я получаю следующую ошибку в приложении MVC4 (.net 4.5) механизма просмотра бритвы при загрузке большого сервера форм ответа JSON в

" Ошибка во время сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength в @Html.Raw(Json.Encode(jsondata​​strong > )"

Я попытался установить свойство MaxJsonLength в свой web.config:

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

Пробовал на стороне сервера при отправке ответа JSON.

 return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };

Также попробовал решение, заявленное заяц: http://brianreiter.org/2011/01/03/custom-jsonresult-class-for-asp-net-mvc-to-avoid-maxjsonlength-exceeded-exception/. Но для меня ничего не работало: (

Могут ли некоторые предложить мне, как избежать этой ошибки или как увеличить максимальную длину ответа Джейсона?

Ответ 1

Как-то я избавляюсь от этой ошибки, используя следующий код в представлении.

@{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
}
<script type="text/javascript">
var entries = @Html.Raw(serializer.Serialize(Model.FeedEntries));    
</script>

Это не работало на стороне сервера, по крайней мере, для меня.

Ответ 2

Мой копейки к решениям. Был ли b) потому что a) дал errormessage 'System.Web.Mvc.JsonResult не содержит определения для maxJsonLength...' в Mvc 4.5 AFAIK, это единственный обходной путь, который работает.

Я положил b) в свой контроллер. Надеюсь, это поможет кому-то.

С уважением, SM

а)

var jsonResult = Json(list, JsonRequestBehavior.AllowGet);
jsonResult.maxJsonLength = int.MaxValue;
return jsonResult;

б)

if (Request.IsAjaxRequest())
{
   //Working solution
   var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue, RecursionLimit = 100 };

   return new ContentResult()
   {
      Content = serializer.Serialize(list),
      ContentType = "application/json",
   };

   //Trial 2
   //var jsonResult = Json(list, JsonRequestBehavior.AllowGet);
   //jsonResult.maxJsonLength = int.MaxValue;
   //return jsonResult;

   //Trial 1
   //return Json(list, JsonRequestBehavior.AllowGet);
} 

Ответ 3

Это со мной работало

   return new JsonResult()
            {
                Data=jsonData,
                MaxJsonLength = 86753090,
                JsonRequestBehavior=JsonRequestBehavior.AllowGet
            };