2012-03-19 71 views
0

我有ASP.NET頁面,它通過$ .ajax調用webservice並返回json格式的結果。Ajax將json作爲對象數組返回。從某些MAGIC數量的對象開始,它無法輸出

JSON數據是一組對象,每個對象是實體與自己的屬性,例如:

StorageEntity 
{ 
Capacity, 
Name, 
NameLink, 
RelatedEntityName, 
RelatedEntityNameLink, 
etc.. 
} 

的問題是在一些該死的幻數:

當實體的結果數是2622 - 似乎沒有問題有多少屬性包含StorageEntity - ajax響應失敗!

起初我以爲總數據量太大。所以我減少了一些詳細鏈接屬性的格式。這樣我將結果數據量減少了20%。但是,幻數並沒有改變!

僅供參考:字符串化結果json的長度爲5MB,優化後約爲4MB。 我知道它太多了,會考慮它。

但是,請解釋我 - 爲什麼它沒有幫助,仍然有2622條記錄沒有輸出(2621是好的),無論數據總量是多少?

p.s.我曾嘗試各種東西,如maxJsonLength,特別是MaxJsonDeserializerMembers - 沒有什麼幫助...

+0

你能檢查該特定記錄的完整性,以確保數據中沒有爆炸的東西嗎?聽起來非常可疑。 – Mathletics 2012-03-19 18:32:06

+0

我查過了。它不依賴於數據。但更奇怪的是:當我指出輸出這個神祕的數量:2622記錄和錯誤發生在ajax - ajax webservice方法本身被調用兩次或更多次!而不是一次,因爲當我調用2621條記錄或更少。 – Alexander 2012-03-20 13:14:09

回答

0

我終於發現,刪除任何屬性(不減少它們的文本表示)正在解決這個問題。但我不想失去我的任何屬性,所以...

解決方案是數據協定序列化程序的maxItemsInObjectGraph參數。

你只需要這個

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name=""> 
       <dataContractSerializer maxItemsInObjectGraph="307200"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

添加到您的網站的web配置。 我的實體有很多屬性,這個數字乘以記錄的數量似乎大於默認設置的64K。