Увеличьте json-ответ maxJsonLength в MVC 4
Я получаю следующую ошибку в приложении MVC4 (.net 4.5) механизма просмотра бритвы при загрузке большого сервера форм ответа JSON в
" Ошибка во время сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength в @Html.Raw(Json.Encode(jsondatastrong > )"
Я попытался установить свойство 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
};