我相信以下内容:
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>
我最初把它留下来以缩短问题。
答案 0 :(得分:1)
我不相信XML有任何内置的版本控制机制。我认为你最好的选择是编写一些外部机制,它可以检测你定义的“版本”,并手动将旧版本反序列化为新的对象。您可能还需要定义一个新版本的成员变量或属性,它将与您的对象进行序列化,以防再次遇到同样的问题,因为一旦您第二次更改模式,您将需要担心3个版本。 / p>
您可以通过在对象上定义IXmlSerializable并定义readXml / writeXml函数来编写自定义反序列化方法,也可以使用某些外部进程根据旧版本生成新的XML格式。也许首先将XML文件加载到XmlDocument中,按照您的需要进行修复(即将Vector3节点向上移动一级并删除Vectors节点),然后将文档的OuterXml值保存到字符串中并通过MemoryStream反序列化。