11

で大規模な JSON 応答フォーム サーバーをロードすると、razor ビュー エンジン MVC4 (.net 4.5) アプリケーションで次のエラーが発生します。

「<strong>JSON JavaScriptSerializer を使用したシリアル化または逆シリアル化中にエラーが発生しました。文字列の長さが、@Html.Raw(Json.Encode(jsondata)) の maxJsonLength プロパティで設定された値を超えています」</p>

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/。しかし、何もうまくいきませんでした:(

このエラーを回避する方法や、ジェイソン応答の最大長を増やす方法を教えてもらえますか?

4

3 に答える 3

23

どういうわけか、ビューで次のコードを使用して、このエラーを取り除きます。

@{
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>

これは、少なくとも私にとってはサーバー側では機能していませんでした。

于 2013-03-11T13:20:25.760 に答える
19

ソリューションへの私のペニー。b) a) が Mvc 4.5 AFAIK で「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);
} 
于 2013-10-01T09:01:56.270 に答える
4

これは私にはうまくいきました

   return new JsonResult()
            {
                Data=jsonData,
                MaxJsonLength = 86753090,
                JsonRequestBehavior=JsonRequestBehavior.AllowGet
            };
于 2016-11-22T08:48:32.127 に答える