1

通过 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 中的对象不会更改。

仅在反序列化数据后才会出现此问题,我不知道如何防止此错误发生。这种行为是否可能,或者我的代码中是否必须存在我尚未找到的交叉引用?

4

2 回答 2

1

通常反序列化不会处理引用相同对象的 2 个对象。相反,它可能会在每个参考位置创建一个新对象。

尝试二进制序列化/反序列化。

如果仍然失败,您可以创建自己的序列化,并创建对象引用列表。一旦你用一个引用序列化一个对象,你之前已经存储过(之前序列化),那么你可以添加一个特殊的标签,这样你就可以在反序列化过程中重建对同一对象的引用。

但这是我计划添加到我的序列化的下一件事,所以.. 自定义序列化的时间可能太长了。希望二进制序列化就足够了

另一种解决方法是使用列表并使用整数(引用正确的索引号)而不是第二个引用。或构建任何其他变量来帮助您重建双重引用

于 2013-04-09T22:42:52.803 回答
1

DataContractSerializer 支持保留对象引用;请参阅此重载中preserveObjectReferences的构造函数参数。您可能需要更改创建序列化程序的方式来支持这一点。

于 2013-04-09T22:48:17.683 回答