我正在使用jQuery的自动完成功能。 当我尝试检索超过17000条记录的列表(每条记录的长度不超过10个字符)时,它超出了长度,并引起错误: web
异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错。 字符串的长度超过了在maxJsonLength属性上设置的值。 json
我能够在web.config
为maxJsonLength
设置无限长度吗? 若是没有,我能够设置的最大长度是多少? 浏览器
注意:此答案仅适用于Web服务,若是要从Controller方法返回JSON,请确保还阅读如下SO答案: https : //stackoverflow.com/a/7207539/1246870 服务器
MaxJsonLength属性不能是无限的,它是一个整数属性,默认为102400(100k)。 app
您能够在web.config上设置MaxJsonLength属性: ide
<configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions> </configuration>
您能够在web.config文件中配置json请求的最大长度: spa
<configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="...."> </jsonSerialization> </webServices> </scripting> </system.web.extensions> </configuration>
maxJsonLength的默认值为102400 。 有关更多详细信息,请参见此MSDN页面: http : //msdn.microsoft.com/zh-cn/library/bb763183.aspx code
问题其实是您是否真的须要返回17,000条记录? 您打算如何处理浏览器中的全部数据? 不管如何,用户不会滚动浏览17000行。 ip
更好的方法是仅检索“前几个”记录,并根据须要加载更多记录。 字符串
彷佛没有“无限”值。 默认值为2097152个字符,至关于4 MB的Unicode字符串数据。
正如已经观察到的,在浏览器中很难很好地使用17,000条记录。 若是要提供聚合视图,则在服务器上进行聚合并仅在浏览器中传输摘要可能会更有效。 例如,考虑文件系统浏览器,咱们只看到树的顶部,而后在向下钻取时发出进一步的请求。 每一个请求中返回的记录数量相对较少。 树视图演示文稿能够很好地用于大型结果集。
在MVC 4中,您能够执行如下操做:
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior) { return new JsonResult() { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior, MaxJsonLength = Int32.MaxValue }; }
在您的控制器中。
加成:
对于那些对您须要指定的参数感到困惑的人,呼叫可能看起来像这样:
Json( new { field1 = true, field2 = "value" }, "application/json", Encoding.UTF8, JsonRequestBehavior.AllowGet );