gpt4 book ai didi

c# - 稍微不平凡的数据结构 : is XmlSerializer right for me?

转载 作者:行者123 更新时间:2023-11-30 12:36:21 24 4
gpt4 key购买 nike

我目前正在使用 XmlSerializer 来处理我的数据结构的反序列化/序列化 - 我发现它使用起来非常简单,但代价是灵 active 。目前,我正在将它用于基于树的结构;由于 XmlSerializer 不处理循环结构,我已将 [XmlIgnore] 添加到我的 Parent 属性,并进行反序列化后迭代修复节点父节点的树。

是否有更好的方法使用 XmlSerializer 来处理这个问题,或者使用 XmlReader/XmlWriter 重写代码会更好吗?我想实现 IXmlSerializable 会奏效,但它似乎需要大量工作,同时仍保留 XmlSerializer 的缺点。

当前的反序列化后步骤没问题,但我要添加一个必须序列化到单独的 XML 文件的数据结构:基本上是一个简单的项目列表,需要一个引用先前树结构中的节点的 Parent 属性.这将需要一个后反序列化步骤,以及在新数据结构中同时保留 Parent 属性和 ParentId(或一些技巧)。

那么,有什么聪明的(而且不脆弱的)想法吗?或者是 XmlReader/XmlWriter

解决方案

DataContractSerializer 结果证明是一个相当不错的解决方案,其简单性与 XmlSerializer 几乎相同。我选择不使用自动循环处理,而是定义和 OnDeserialized处理设置父节点的修饰方法;这样,生成的 XML 就符合标准。

让我困惑了一段时间的一件事是,在反序列化后我在某些属性上崩溃,支持成员设置为 null - 无法弄清楚这是怎么可能的,因为支持成员肯定在所有可能的构造函数中初始化.调试显示从未调用过构造函数,经过一些谷歌搜索后我发现 this SO post有解释。

最佳答案

您可以尝试二进制序列化(BinarySerializer 或 DataContractSerializer),我认为它可以更好地处理循环图,但代价是没有人类可读的数据表示形式。或者,您可以尝试 SoapFormatter,详见 here .

关于c# - 稍微不平凡的数据结构 : is XmlSerializer right for me?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com