JavaScriptSerializer期间ASP.NET MVC中的MaxJsonLength异常

在我的控制器操作之一中,我将返回一个很大的值JsonResult以填充网格。


我收到以下InvalidOperationException异常:


使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了在maxJsonLength属性上设置的值。


不幸的是,将中的maxJsonLength属性设置web.config为较高的值不会显示任何效果。


<system.web.extensions>

  <scripting>

    <webServices>

      <jsonSerialization maxJsonLength="2147483644"/>

    </webServices>

  </scripting>

</system.web.extensions>

我不想像这个答案中提到的那样将其作为字符串传递回来。


在我的研究中,我遇到了这篇博客文章,建议您编写自己的文章ActionResult(例如LargeJsonResult : JsonResult)以绕过此行为。


这是唯一的解决方案吗?

这是ASP.NET MVC中的错误吗?

我想念什么吗?


非常感激任何的帮助。


蛊毒传说
浏览 719回答 3
3回答

潇湘沐

看来这已在MVC4中修复。您可以这样做,对我来说效果很好:public ActionResult SomeControllerAction(){&nbsp; var jsonResult = Json(veryLargeCollection, JsonRequestBehavior.AllowGet);&nbsp; jsonResult.MaxJsonLength = int.MaxValue;&nbsp; return jsonResult;}

噜噜哒

您也可以ContentResult按照此处的建议使用,而不是子类化JsonResult。var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue, RecursionLimit = 100 };return new ContentResult(){&nbsp; &nbsp; Content = serializer.Serialize(data),&nbsp; &nbsp; ContentType = "application/json",};

蝴蝶不菲

我通过以下 链接解决了这个问题namespace System.Web.Mvc{public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory{&nbsp; &nbsp; public override IValueProvider GetValueProvider(ControllerContext controllerContext)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (controllerContext == null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new ArgumentNullException("controllerContext");&nbsp; &nbsp; &nbsp; &nbsp; if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);&nbsp; &nbsp; &nbsp; &nbsp; var bodyText = reader.ReadToEnd();&nbsp; &nbsp; &nbsp; &nbsp; return String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter()), CultureInfo.CurrentCulture);&nbsp; &nbsp; }}}protected void Application_Start()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; AreaRegistration.RegisterAllAreas();&nbsp; &nbsp; &nbsp; &nbsp; RegisterGlobalFilters(GlobalFilters.Filters);&nbsp; &nbsp; &nbsp; &nbsp; RegisterRoutes(RouteTable.Routes);&nbsp; &nbsp; &nbsp; &nbsp; //Remove and JsonValueProviderFactory and add JsonDotNetValueProviderFactory&nbsp; &nbsp; &nbsp; &nbsp; ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().FirstOrDefault());&nbsp; &nbsp; &nbsp; &nbsp; ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP