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

27

我正在通过jQuery的ajax post方法通过Web方法加载大约200-300条记录的选项卡内容数据。在控制台中出现以下错误:

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

像这样更改Web.config中的maxJsonLength属性的长度无济于事。

<configuration> 
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="2147483644" />
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration>

有人能帮我解决这个问题吗?


也许你的数据仍然超过了这个限制? - Riain McAtamney
我有同样的问题,我的数据没有超过限制,所以下面的答案对我没有帮助。 - pilavdzice
1
如果其他人也遇到了这个问题,可以在这里找到答案:https://dev59.com/c3M_5IYBdhLWcg3w9oQA - Paul
3个回答

37
JavaScriptSerializer有一个名为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);

这应该完美地运行,我最近通过 MSDN 找到了解决一个困扰我很久的问题的方法。


6

我知道这篇文章在我阅读时已经很老了,而且WebMethod在ASP.NET MVC中并不是真正的东西,所以这有点离题。但是,如果有人遇到这个问题 -

如果你使用ASP.NET MVC,那么调用JavaScriptSerializer的另一种选择是初始化JsonResult并在结果本身上设置MaxJsonLength属性:

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

    }

0

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

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

请参见此处以获取替代方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接