web-dev-qa-db-ja.com

MVC4でjson応答maxJsonLengthを増やす

で大規模な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/ 。しかし、私には何もうまくいきませんでした:(

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

11
Nabeel

どういうわけか私はビューで次のコードを使用することによってこのエラーを取り除きます。

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

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

23
Nabeel

ソリューションへの私のペニー。 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);
} 
19
Emperor 2052

これは私に働いた

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