1. 程式人生 > >MVC中JSON字符長度超出限制

MVC中JSON字符長度超出限制

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字符長度超出限制