2012-03-19 78 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。