で大規模なJSON応答フォームサーバーをロードすると、レイザービューエンジンMVC4(.net 4.5)アプリケーションで次のエラーが発生します
「JSON JavaScriptSerializerを使用したシリアル化または逆シリアル化中にエラーが発生しました。文字列の長さが@ Html.Raw(Json.Encode(jsondata))のmaxJsonLengthプロパティに設定された値を超えています。」
Web.configでMaxJsonLengthプロパティを設定してみました。
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/ 。しかし、私には何もうまくいきませんでした:(
このエラーを回避する方法や、ジェイソンの応答の最大長を増やす方法を教えてもらえますか?
どういうわけか私はビューで次のコードを使用することによってこのエラーを取り除きます。
@{
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>
これは、少なくとも私にとってはサーバー側では機能していませんでした。
ソリューションへの私のペニー。 b)を行ったのは、a)がMvc 4.5AFAIKでエラーメッセージ「System.Web.Mvc.JsonResultにmaxJsonLength ...の定義が含まれていない」を示したためです。これが機能する唯一の回避策です。
私はb)をコントローラーに入れました。うまくいけば、これは誰かを助けるでしょう。
よろしく、SM
a)
var jsonResult = Json(list, JsonRequestBehavior.AllowGet);
jsonResult.maxJsonLength = int.MaxValue;
return jsonResult;
b)
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);
}
これは私に働いた
return new JsonResult()
{
Data=jsonData,
MaxJsonLength = 86753090,
JsonRequestBehavior=JsonRequestBehavior.AllowGet
};