XmlSerializer:保留未知元素

flo*_*pes 5 c# serialization 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public string MiddleName;
Run Code Online (Sandbox Code Playgroud)

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

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

Gen*_*ene 8

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

[XmlAnyElement]
public XmlElement[] Unsupported { get; set; }
Run Code Online (Sandbox Code Playgroud)