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