首先让我先说我知道这个错误意味着什么。我知道 <jsonSerialization maxJsonLength="50000000"/>
并且我理解(在我看来,非常好的)限制的原因。
因此,我使用 .NET ScriptManager 从 javascript 调用 Web 服务来为我创建所有客户端代码。
Web 服务从 SQL 中获取一堆数据,将其转换为对象数组,然后返回该数组。
在后台,.NET 引擎将此数组转换为 JSON 数组以发送到客户端。
然而,有时生成的 JSON 字符串太长并且会引发异常。
我想要一些通用的方法来检测这个错误并优雅地处理它(例如,通过发送一些带有指示符的数据,表明应该发出另一个后续请求来获取其余部分)
我不想做的是对 json 字符串的长度设置一个很高的限制,因为这可能导致客户端需要很长时间才能获取所有数据。我相信这个设置的上限是 2147483644,即 2GB。当所有数据及时到达时,客户端可能已经厌倦并迷失了方向,从而在尝试解析它时使 javascript 引擎崩溃。
所以我想我真正追求的是一种方法来“知道”生成的 json 字符串在返回之前将有多长,以便可以适当截断它,或者以某种方式处理生成的错误,缩短数组并重试(并不断缩短并重试,直到它起作用或数组为空)。
我尝试在 return 语句周围放置一个 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();
}