XmlSerializer:保留未知元素

我有一个从XML序列化/反序列化并存储在文件中/从文件中恢复的类:

public class Customer { public string FirstName; public string LastName; public Customer() { } public Customer(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } public static Customer Load(TextReader reader) { XmlSerializer deserializer = new XmlSerializer(typeof(Customer)); return (Customer)deserializer.Deserialize(reader); } public void Save(TextWriter writer) { XmlSerializer serializer = new XmlSerializer(GetType()); serializer.Serialize(writer, this); } } 

在这个类的较新版本中,我添加了一个新属性

 public string MiddleName; 

用户已经安装了我的程序的旧版本和新版本的常见用例。 它们都读取和写入相同的序列化文件。 当新版本写入文件时,将写入所有三个属性( FirstNameLastNameMiddleName )。 旧程序读取文件但省略了未知元素MiddleName 。 它保存没有MiddleName的文件,因此对于较新的程序它的值会丢失。

在序列化时反序列化和“合并”未知元素时,有没有办法存储原始XML? 旧程序会忽略未知元素,但会将它们写回文件中,以免新程序丢失。

我现在无法测试它,因为我在Mac OS X上,但XmlAnyElement应该工作:

 [XmlAnyElement] public XmlElement[] Unsupported { get; set; } 

XMLSerializer序列化。 如果信息不可用,它怎么能序列化?

你可以做的是更新xmlfile,而不是序列化和覆盖它。 这是额外的工作,因为你必须自己遍历文件,但它可以让你实现你想要的。

如何使用.NET Framework SDK中的XmlDocument类修改和保存XML