c# - WCF 无法序列化循环引用

标签 c# wcf serialization silverlight-4.0

我有一个数据库,其中有很多 Tables 之间的关系和一个 Silverlight使用 WCF service 连接到我的服务器的客户端在 ASP.Net边。

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

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

Object graph for type 'X.Y.Z' contains cycles and cannot be serialized if reference tracking is disabled

我搜索了这个错误并找到了 this great post但这不能正常工作,我也看到同样的错误。

最佳答案

各种选项:

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

我会坚决支持“DTO 模型”这一类别;简单地说,拥有一个单独的模型意味着您在调整数据库时不太可能遇到困惑 - 并且您可以完全控制它。

关于c# - WCF 无法序列化循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4012289/

相关文章:

c# - 使用MVVM(无任何代码)且无导航时,单击按钮时更改 View

c# - 在 WCF 中自定义 SOAP header 命名空间前缀

php - 是否可以使用 JMS Serializer 将数组序列化到对象的根?

.net - 为什么类在 .Net 中默认不可序列化?

c# - 使用 HTML 在 MVC 中提交表单

c# - 以编程方式控制 Chrome

c# - 我应该使用响应代码、异常(exception)情况还是短信来进行服务响应?

java - 我需要恢复一个 Activity 实例

c# - 以编程方式获取 nunit 库中的测试列表,而无需运行测试

c# - 如何使 Entity Framework CTP5 与 SQLite 一起工作?