WCF无法序列化循环引用

Mey*_*adi 4 c# wcf serialization silverlight-4.0

我有一个批次之间关系的数据库TablesSilverlight连接到我的服务器与客户端WCF serviceASP.Net的一面.

首先,我使用LINQ to SQL一个强大的映射器表来对象,并WebMethod返回一个List<Foo>我的数据库对象(假设GetFoo()).将Foo有很多与其他对象的关系,每个有很多realaships太大,(这意味着,有一个PK和FK表之间).还有我使用Microsoft Service Trace Viewr了我的跟踪服务

当我调用GetFoo()时,WCF返回此错误:

"XYZ"类型的对象图包含循环,如果禁用参考跟踪,则无法序列化

我搜索了这个错误,并找到了这个伟大的帖子,但这不能正常工作,我也看到同样的错误.

Mar*_*ell 5

各种选择:

  • 从模型中删除循环依赖项; 对于生成的模型而言,这可能很棘手,因为生成的模型有很多针对它构建的现有代码,但值得一 ; 但是,您通常希望不对父级进行序列化,这正是LINQ-to-SQL 希望您保留的内容(它会让您删除属性,但这是您通常要序列化的内容)
  • 启用循环引用; 看起来你已经尝试过没有成功; 你是否在两端都启用了它?实际上,如果Silverlight不喜欢这个扩展(它的扩展支持有限),我不会感到惊讶
  • 使用单独的(平面)DTO模型进行数据传输
  • 尝试使用NetDataContractSerializer; 我不记得Silverlight是否支持这一点,我必须承认我不是它最大的粉丝,但这可能是一个务实的解决方法

我会在"DTO模式"类别中坚决投票; 简单地说,拥有一个单独的模型意味着每当你调整数据库时你就不太可能遇到纠结 - 你完全可以控制它.