MVC中JSON字符長度超出限制
阿新 • • 發佈:2017-11-30
invalid 需要 長度 ima indicator 反序 fan 技術 pts
本文導讀:在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# 代碼 復制
namespace WEBMVC.Helpers
{
public static class ControllerExtensions
{
public static int MaxJsonLength{get;set;}
public static ControllerExtensions()
{
MaxJsonLength = 2147483644;
}
public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data)
{
return new System.Web.Mvc.JsonResult()
{
Data = data,
MaxJsonLength = MaxJsonLength,
};
}
public static System.Web.Mvc.JsonResult LargeJson(this System.Web.Mvc.Controller controlador, object data, System.Web.Mvc.JsonRequestBehavior behavior)
{
return new System.Web.Mvc.JsonResult()
{
Data = data,
JsonRequestBehavior = behavior,
MaxJsonLength = MaxJsonLength
};
}
//TODO: You can add more overloads, the controller class has 6 overloads
}
}
2、在需要返回大數據的控制器裏面如下調用
C# 代碼 復制using WEBMVC.Helpers;
namespace WEBMVC.Controllers
{
public class VentasController : Controller
{
ControllerExtensions.MaxJsonLength = 1073741824;//1GB,如果需要單獨設置長度,如果不需要,則不設置該值
public ActionResult VentasList (){
//Todo: All the action code
return ControllerExtensions.LargeJson(myData);
}
}
}
MVC中JSON字符長度超出限制