我目前正在使用XmlSerializer
,令人惊讶的是:),处理我的数据结构的反序列化 - 我发现它非常易于使用,但以灵活性为代价。目前,我将它用于基于树的结构;由于XmlSerializer
不处理循环结构,我已添加[XmlIgnore]
到我的Parent
属性中,并在树上进行后反序列化迭代以修复节点父节点。
有没有更好的方法来处理这个问题XmlSerializer
,还是用重写代码会更好XmlReader/XmlWriter
?我想实施IXmlSerializable
会奏效,但这似乎是相当多的工作,同时仍然保留XmlSerializer
.
当前的后反序列化步骤没问题,但是我添加了一个必须序列化到单独的 XML 文件的数据结构:基本上是一个平面列表,需要一个 Parent 属性来引用先前树结构中的一个节点。这将需要一个后反序列化步骤,以及在新数据结构中保留 Parent 属性和 ParentId(或一些技巧)。
那么,有什么聪明(且不脆弱)的想法吗?或者XmlReader/XmlWriter
它是?
解决方案
DataContractSerializer
结果证明是一个相当不错的解决方案,其简单性与 XmlSerializer 几乎相同。我选择不使用自动循环处理,而是定义和OnDeserialized装饰方法来处理设置父节点;这样,生成的 XML 就符合标准。
让我困惑一段时间的一件事是,在反序列化后我在某些属性上崩溃了,支持成员设置为 null - 无法弄清楚这是怎么可能的,因为支持成员肯定在所有可能的构造函数中初始化。调试显示从未调用过构造函数,经过一番谷歌搜索后,我发现这个 SO 帖子有解释。