通过DataContracts序列化自定义数据对象并恢复它时,我遇到了一个奇怪的问题。我有以下类出现问题:
[DataContract]
public class ProjectManager
{
// list of projects
[DataMember]
public List<Project> ProjectList { get; set; }
// active project
[DataMember]
public Project ActiveProject { get; set; }
// instance variable
[DataMember]
private static ProjectManager instance = null;
ActiveProject保存对ProjectList中一个对象的引用。问题是在一种情况下,保存在ActiveProject中的引用似乎不等于ProjectList中的引用,尽管列表中只有一个引用。如果我更改了我的ActiveProject,则ProjectList中的对象不会更改。
此问题仅在反序列化数据后发生,我不知道我能做些什么来防止此错误发生。这种行为是否可行,或者我的代码中是否存在我尚未找到的任何交叉引用?
答案 0 :(得分:1)
DataContractSerializer支持保留对象引用;请参阅preserveObjectReferences
构造函数参数in this overload。您可能需要更改创建序列化程序的方式以支持此功能。
答案 1 :(得分:0)
通常,反序列化不会处理引用相同对象的2个对象。相反,它可以在每个参考位置创建一个新对象。
尝试二进制序列化/反序列化。
如果仍然失败,您可以创建自己的序列化,并创建对象引用列表。只要您使用引用序列化对象(之前已经存储过)(之前已序列化),那么您可以添加一个特殊标记,这样您就可以在反序列化期间重建对同一对象的引用。
但这是我计划在序列化中添加的下一个内容,因此自定义序列化的时间可能太长。希望二进制序列化就足够了
另一种解决方法是使用列表并使用整数(引用正确的索引号)而不是第二个引用。或构建任何其他可帮助您重建双引用的变量