我可以在不破坏向后兼容性的情况下将[XmlElement]属性添加到List成员中吗
本文关键字:添加 属性 XmlElement List 成员 情况下 兼容性 我可以 | 更新日期: 2023-09-27 18:21:52
我相信以下几点:
public List<Vector3> Vectors;
将序列化为:
<Vectors>
<Vector3>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
</Vectors>
我想去掉包装标签,我相信我可以这样做:
[XmlElement("Vector3")]
public List<Vector3> Vectors;
应序列化为:
<Vector3>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Vector3>
但我担心这会破坏仍在列表中使用"Vectors"标记的旧XML文件。有没有一种通用的方法来解决这个问题?
编辑:上面的列表将是容器对象的一部分,因此完整的XML可能以开头
<Container>
以结束
</Container>
我把这一点省略了,最初是为了让问题简短一些。
我不认为XML有任何内置的版本控制机制。我认为最好的办法是编写一些外部机制,它可以检测您定义的"版本",并手动将旧版本反序列化到新对象中。您可能还想定义一个新的版本成员变量或属性,该变量或属性将与您的对象序列化,以防再次遇到相同的问题,因为一旦您第二次更改架构,您将有3个版本需要担心。
您可以通过在对象上定义IXmlSerializable并定义readXml/writeXml函数来编写自定义反序列化方法,也可以使用一些外部进程基于旧版本生成新的XML格式。也许先将XML文件加载到XmlDocument中,根据需要进行修复(即将Vector3节点向上移动一级并删除Vectors节点),然后将文档的OuterXml值保存到字符串中,并通过MemoryStream进行反序列化。