我正在通过jQuery的ajax
post方法通过web方法加载标签内容数据,大约有200-300条记录。并在控制台中收到以下错误:
错误: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>
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:32)
JavaScriptSerialzer根据
有一个名为MaxJsonLength的公共属性现在,您要对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解决了这个问题并解决了一个长期困扰我的问题。
答案 1 :(得分:5)
我知道在我阅读时这是一个非常老的线程,并且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
};
}
答案 2 :(得分:0)
不知道你的字符串的大小,但它可能仍然超过你设置的最大限制?
理想情况下,ajax方案仅适用于中小型服务器端调用,而不是用于获取大量数据,如果您使用异步请求获取大量数据,那么您就会遇到麻烦。
有关替代方案,请参阅here