本文导读:在MVC中通过JsonResult返回JSON字符串时,如果字符串长度过长,会抛出使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值,下面介绍其解决方法。

ASP.NET MVC中通过JsonResult返回JSON字符串时,当JSON字符串长度过长时,会报如下错误

异常详细信息: System.InvalidOperationException: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。

由于原来MVC框架内置的JsonResult代码中,在使用JavaScriptSerializer时,都是采用的默认值,没有从maxJsonLength读取值,即忽略了这个配置,所以通过修改 web.config ,设置 jsonSerialization节点maxJsonLength属性值是无效的

解决方法

1、新建一个控制器扩展类

C# 代码   复制
MVC中JSON字符长度超出限制-LMLPHPMVC中JSON字符长度超出限制-LMLPHP

namespace WEBMVC.Helpers

MVC中JSON字符长度超出限制-LMLPHP

{
MVC中JSON字符长度超出限制-LMLPHP    public static class ControllerExtensions
MVC中JSON字符长度超出限制-LMLPHP    {
MVC中JSON字符长度超出限制-LMLPHP        public static int MaxJsonLength{get;set;}
MVC中JSON字符长度超出限制-LMLPHP
MVC中JSON字符长度超出限制-LMLPHP        public static ControllerExtensions()
MVC中JSON字符长度超出限制-LMLPHP        {
MVC中JSON字符长度超出限制-LMLPHP            MaxJsonLength = 2147483644;
MVC中JSON字符长度超出限制-LMLPHP        }
MVC中JSON字符长度超出限制-LMLPHP
MVC中JSON字符长度超出限制-LMLPHP        public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data)
MVC中JSON字符长度超出限制-LMLPHP        {
MVC中JSON字符长度超出限制-LMLPHP            return new System.Web.Mvc.JsonResult()
MVC中JSON字符长度超出限制-LMLPHP            {
MVC中JSON字符长度超出限制-LMLPHP                Data = data,
MVC中JSON字符长度超出限制-LMLPHP                MaxJsonLength = MaxJsonLength,
MVC中JSON字符长度超出限制-LMLPHP            };
MVC中JSON字符长度超出限制-LMLPHP        }
MVC中JSON字符长度超出限制-LMLPHP        public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data, System.Web.Mvc.JsonRequestBehavior behavior)
MVC中JSON字符长度超出限制-LMLPHP        {
MVC中JSON字符长度超出限制-LMLPHP            return new System.Web.Mvc.JsonResult()
MVC中JSON字符长度超出限制-LMLPHP            {
MVC中JSON字符长度超出限制-LMLPHP                Data = data,
MVC中JSON字符长度超出限制-LMLPHP                JsonRequestBehavior = behavior,
MVC中JSON字符长度超出限制-LMLPHP                MaxJsonLength = MaxJsonLength
MVC中JSON字符长度超出限制-LMLPHP            };
MVC中JSON字符长度超出限制-LMLPHP        }
MVC中JSON字符长度超出限制-LMLPHP        //TODO: You can add more overloads, the controller class has 6 overloads
MVC中JSON字符长度超出限制-LMLPHP    }
MVC中JSON字符长度超出限制-LMLPHP}
MVC中JSON字符长度超出限制-LMLPHP

2、在需要返回大数据的控制器里面如下调用

 
 
C# 代码   复制
MVC中JSON字符长度超出限制-LMLPHPMVC中JSON字符长度超出限制-LMLPHP

using WEBMVC.Helpers;

MVC中JSON字符长度超出限制-LMLPHPMVC中JSON字符长度超出限制-LMLPHP

namespace WEBMVC.Controllers

MVC中JSON字符长度超出限制-LMLPHP

{
MVC中JSON字符长度超出限制-LMLPHP    public class VentasController : Controller
MVC中JSON字符长度超出限制-LMLPHP    {
MVC中JSON字符长度超出限制-LMLPHP        ControllerExtensions.MaxJsonLength = 1073741824;//1GB,如果需要单独设置长度,如果不需要,则不设置该值
MVC中JSON字符长度超出限制-LMLPHP
MVC中JSON字符长度超出限制-LMLPHP        public ActionResult VentasList (){
MVC中JSON字符长度超出限制-LMLPHP            //Todo: All the action code
MVC中JSON字符长度超出限制-LMLPHP
MVC中JSON字符长度超出限制-LMLPHP            return ControllerExtensions.LargeJson(myData);
MVC中JSON字符长度超出限制-LMLPHP        }
MVC中JSON字符长度超出限制-LMLPHP    }
MVC中JSON字符长度超出限制-LMLPHP}
05-11 15:26
查看更多