首先让我开始说我知道这个错误的含义。 我知道<jsonSerialization maxJsonLength="50000000"/>
而且我明白(在我看来,非常好)有限制的原因。检测字符串的长度超过服务器上maxJsonLength属性设置的值
因此,我使用.NET ScriptManager从JavaScript调用web服务为我创建所有客户端代码。
Web服务从SQL获取一堆数据,将其转换为对象数组,然后返回该数组。
.NET引擎将这个数组转换为一个JSON数组发送到客户端。
但是,有时候产生的JSON字符串太长,会引发异常。
我想检测这种错误,并适当地处理它的一些通用的方法(例如,通过发送一些数据与指标,另一个后续请求中提出,要得到休息)
我不想要什么要做的就是对json字符串的长度设置一个天空上限,因为这可能会导致在客户端获取所有数据之前花费很长时间。我相信这个设置的上限是2147483644,即2GB。 当客户端试图解析JavaScript引擎时,客户端很可能会感到无聊,并且在所有数据到达的时候都会随时崩溃。
所以我想我真正想知道的是一种方法来“知道”多久后得到的json字符串将返回它之前,以便它可以被截断适当,或某种方式来处理结果的错误,缩短数组并重试(并保持缩短并重试,直到它工作或数组为空)。
我曾尝试在返回语句周围放一个try/catch,但这不起作用 - 我怀疑是因为webservice方法成功地将数据返回给框架,但框架随后扼杀了数据。
我宁愿一个解决方案,不涉及返回一个字符串,但如果没有其他方式,我可以忍受。
[WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public MyClass[] GetMyClasses()
{
List<MyClass> lst;
//code that populate lst with enough instances to break the JSON.
return lst.ToArray();
}
每条记录的大小可能会有很大的变化,因此无法知道在不查看数据的情况下有多少记录可以提取。 还要考虑即使是一个简单的float在JSON中的大小也会有所不同(0 vs 1.2345678e234) – DJL