C# 检测到字符串长度超过服务器上maxJsonLength属性上设置的值
首先让我说我知道这个错误的意思。 我知道C# 检测到字符串长度超过服务器上maxJsonLength属性上设置的值,c#,asp.net,.net,ajax,json,C#,Asp.net,.net,Ajax,Json,首先让我说我知道这个错误的意思。 我知道jsonSerialization maxJsonLength=“50000000”/ 我理解(在我看来,非常好的)限制的理由 因此,我使用.NETScriptManager从javascript调用一个Web服务来为我创建所有客户端代码 webservice从SQL中获取一组数据,将其转换为一个对象数组,然后返回该数组 NET引擎将此数组转换为JSON数组,以发送到客户端 但是,有时生成的JSON字符串太长,会引发异常 我想要一些通用的方法来检测这个错误
jsonSerialization maxJsonLength=“50000000”/
我理解(在我看来,非常好的)限制的理由
因此,我使用.NETScriptManager从javascript调用一个Web服务来为我创建所有客户端代码
webservice从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();
}
[WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat=System.Web.Script.Services.ResponseFormat.Json)]
公共MyClass[]GetMyClass()
{
列表lst;
//用足够的实例填充lst以破坏JSON的代码。
返回lst.ToArray();
}
与其尝试计算结果的JSON长度,然后应用某种类型的分页,也许您应该始终分页您的数据
您已经知道该方法可能会产生大量数据,因此为什么不将方法更改为GetMyClass(int skip,int take)以强制执行大小合理的数据块。每个记录的大小可能会有很大的变化,因此,在不查看数据的情况下,不可能知道要获取多少记录才是合理的数量。还可以考虑,即使是简单的浮子,JSON中的大小也不同(0比1.23 45 67 8E23)。