在WCF中反序列化对象时出错

在WCF中反序列化对象时出错,wcf,serialization,rest,Wcf,Serialization,Rest,我已经在WCF中创建了一个REST服务。我面临以下问题 反序列化System.Collections.Generic.IList类型的对象时出错。已超过最大读取深度(32),因为正在读取的XML数据的嵌套级别超过配额允许的级别。可以通过更改创建XML读取器时使用的XmlDictionaryReaderQuotas对象的MaxDepth属性来增加此配额 我没有在配置中指定任何类型的绑定,因为我根据REST Starter工具包开发了服务。请建议我如何修理它 代码有时工作正常,但确实会抛出错误。在我

我已经在WCF中创建了一个REST服务。我面临以下问题

反序列化System.Collections.Generic.IList类型的对象时出错。已超过最大读取深度(32),因为正在读取的XML数据的嵌套级别超过配额允许的级别。可以通过更改创建XML读取器时使用的XmlDictionaryReaderQuotas对象的MaxDepth属性来增加此配额

我没有在配置中指定任何类型的绑定,因为我根据REST Starter工具包开发了服务。请建议我如何修理它


代码有时工作正常,但确实会抛出错误。

在我的例子中,问题是我返回了从数据上下文获得的实体框架对象。解决方案是在重新调整对象之前分离每个对象。

在我的例子中,分离对象是不可能的,因为EF上下文已经被释放

相反,我使用了扩展方法

…在其他一些情况下,我还必须通过将一些导航属性设置为null来剪切循环引用

…而且没有耍花招


关于这个问题的更多细节可以在这里找到:

和/或应该使用任何其他最新的REST框架。

我今天也遇到了同样的问题。如果您没有在数据协定中正确设置KnowType和IsReference,则它可能是循环引用首先检查这些点。真的

但是当你面对这种行为的时候

代码有时工作正常,但确实会抛出错误

您还应该检查您在线路上发送的图形是否深且复杂(如两个以上的导航属性深)。那么它可能只是绑定配置中readerquota的MaxDepth太低了。当最深的导航属性为空时,服务将工作,但当它们至少包含一个元素时,将抛出此错误

此配置的默认值为32,请尝试使用64

现在,我们可以讨论在服务上使用过多的深度图与WCF配置中的低默认值相比的低质量设计

我不是说你必须把你的图分成更小的部分,但是你应该。

1)堆栈后跟踪2)包括你试图序列化其列表的类的定义,它看起来像一个循环引用