我正在使用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 );