【发布时间】:2010-12-17 18:28:02
【问题描述】:
我正在使用 Silverlight 4、.NET 4.0。
我有一个在共享库中定义的对象(在我的 Silverlight 项目和托管 WCF 服务的 Web 项目之间共享)
对象是一个树结构,它有一个子节点列表,以及对其父节点和根节点的引用。
即。
class TreeNode
{
public List<TreeNode> Children {get; set;}
public TreeNode Root { get; set; }
public TreeNode Parent { get; set; }
}
问题是当 Silverlight 尝试获取此对象并将其发送到服务器时,我收到有关循环引用的异常。经过一番研究,我发现我必须像这样将属性 IsReference 启用为 true:
[DataContract(IsReference = true)]
class TreeNode
{
public List<TreeNode> Children {get; set;}
public TreeNode Root { get; set; }
public TreeNode Parent { get; set; }
}
问题是当我这样做时,我的 WCF 服务不再工作,因为它无法为此加载所需的程序集:
“无法加载文件或程序集'System.Runtime.Serialization, Version=2.0.5.0”
这是因为包含 TreeNode 类的项目是针对 Silverlight 运行时而非 .NET 运行时构建的,并且使用 System.Runtime.Serialization v2.0.5.0,而 Web 项目和 WCF 服务使用 v4.0.30319。
所以,我的问题是:有没有一种方法可以让这个对象序列化,同时保留引用,而无需将整个对象结构移动到一个针对标准 .NET 4.0 运行时构建的不同项目?
另外,值得注意的是,我尝试过使用条件编译,例如:
#if SILVERLIGHT
[DataContract(IsReference = true)]
#endif
但这不起作用,因为 WCF 服务需要知道它必须保留引用...
非常感谢您对此提供的任何帮助。
【问题讨论】:
标签: silverlight wcf serialization datacontract