我有一个从 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;
用户同时安装了我的程序的新旧版本是一个常见的用例。他们都读取和写入相同的序列化文件。当新版本写入文件时,所有三个属性(FirstName
、LastName
、MiddleName
)都被写入。旧程序读取文件但忽略了未知元素 MiddleName
。它保存没有 MiddleName
的文件,因此对于较新的程序来说它的值(value)就丢失了。
有没有办法在反序列化时存储原始 XML 并在序列化时“合并”未知元素?旧程序会忽略未知元素,但将它们写回文件中,这样新程序就不会丢失它们。
最佳答案
现在无法测试它,因为我在 Mac OS X 上,但是 XmlAnyElement应该工作:
[XmlAnyElement]
public XmlElement[] Unsupported { get; set; }
关于c# - XmlSerializer:保留未知元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787284/