2013-03-08 62 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