gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:35:38 25 4
gpt4 key购买 nike

我有一个数据库,其中有很多 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com