2013-03-08 94 views
10

我正在使用JSON JavaScriptSerializer序列化和反序列化過程中在增加JSON響應maxJsonLength 4

錯誤加載一個大的JSON響應形式服務器當在剃刀視圖發動機MVC4(.NET 4.5)應用以下錯誤字符串的.The長度超過在@ Html.Raw(Json.Encode(jsondata)」

我已經在我的web.config設置MaxJsonLength財產試圖在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/。但沒有在視圖中使用下面的代碼爲我工作:(

能否有人建議我如何避免這種錯誤,或者如何提高傑森響應最大長度?

+0

您是否嘗試過的解決方案建議在這裏的http:// stackoverflow.com/questions/6860053/json-maximum-length-pro blem-with-asp-net? – 2013-03-08 06:54:01

+0

是的,我也厭倦了這個解決方案。但沒有成功 – Nabeel 2013-03-08 09:56:54

+0

'我也厭倦了這個解決方案'漂亮弗洛伊德滑:-) – 2017-06-22 11:56:21

回答

20

不知怎的,我擺脫這種錯誤的。

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

這在服務器端沒有工作至少對我來說。

+3

這有助於如果你必須序列化視圖中的模型。 – Pnct 2014-09-25 11:18:41

+0

這是爲我工作。 – 2017-02-20 13:14:09

16

我一分錢的解決方案。難道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; 

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); 
} 
+0

這是在MVC3上爲我工作的唯一解決方案 – 2014-03-06 16:01:45

+1

在MVC 4中,解決方案a)有效。注意jsonResult.MaxJsonLength中的大寫字母'M' – StebQC 2014-03-07 20:55:14

+0

a)正在爲我自定義值 – 2016-06-13 11:31:16

3

這個工作對我來說

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

嘗試了很多不起作用的東西,而且這個技巧很好用,很好! – edencorbin 2017-03-25 21:35:56