Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测到字符串长度超过服务器上maxJsonLength属性上设置的值_C#_Asp.net_.net_Ajax_Json - Fatal编程技术网

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)。