字符串的长度超过maxJsonLength属性上设置的值

swp*_*til 25 asp.net jquery webmethod

我正在通过jQuery的ajaxpost方法通过web方法加载标签内容数据,大约有200-300条记录.并在控制台中收到以下错误:

错误:Sys.Net.WebServiceFailedException:Sys.Net.WebServiceFailedException:System.InvalidOperationException--使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.

maxJsonLength像这样在Web.config中更改属性的长度没有帮助.

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="2147483644" />
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration>
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?

Tah*_*qui 34

JavaScriptSerialzer有一个名为MaxJsonLength的公共属性

http://msdn.microsoft.com/en-us/library/system.web.configuration.scriptingjsonserializationsection.maxjsonlength.aspx

现在,在你反序列化json的地方,使用它

JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue; //Or any size you want to use, basically int maxValue is 2GB, you shouldn't need this big json string to deserialize, else you are doing it wrong.
myObject obj = serializer.Deserialize<myObject>(yourJsonString);
Run Code Online (Sandbox Code Playgroud)

这应该是完美的,我最近通过msdn解决了这个问题并解决了一个长期困扰我的问题.


lew*_*ort 5

我知道在我阅读时这是一个非常古老的线程,并且WebMethod在ASP.NET MVC中并不是真正的东西所以这有些切合实际.但是,如果有人遇到它 -

如果使用ASP.NET MVC有一种JavaScriptSerializer直接调用的替代方法,即初始化JsonResultMaxJsonLength在结果本身上设置属性:

    private JsonResult GetReallyBigJsonResult(object data, JsonRequestBehavior requestBehavior)
    {
            return new JsonResult()
            {
                ContentEncoding = Encoding.Default,
                ContentType = "application/json",
                Data = data,
                JsonRequestBehavior = requestBehavior,
                MaxJsonLength = int.MaxValue
            };

    }
Run Code Online (Sandbox Code Playgroud)


Ria*_*ney 0

不知道字符串的大小,但也许它仍然超出了您设置的最大限制?

理想情况下,ajax 场景仅适用于中小型服务器端调用,而不是获取大量数据,如果您使用异步请求获取大量数据,那么您就是在自找麻烦。

请参阅此处的替代方案