我有一个类,可以序列化成XML并存储在文件中,也可以从文件中反序列化并还原:
在这个类的较新版本中,我添加了一个新属性。
这是一个常见的用例,即用户安装了我的程序的旧版本和新版本。它们都读写同一个序列化文件。当新版本写入文件时,所有三个属性(
在反序列化时存储原始 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
的文件,因此它的值对于较新的程序来说就丢失了。在反序列化时存储原始 XML,并在序列化时“合并”未知元素,这样旧程序将忽略未知元素,但将其写回文件中,以便新程序不会丢失它们。