c# - XmlSerializer:保留未知元素

标签 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);
    }
}

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

public string MiddleName;

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

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

最佳答案

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

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

关于c# - XmlSerializer:保留未知元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787284/

相关文章:

c# - PetaPoco 核心 .cs 文件在 ASP.NET 5 类库包中不可见

javascript - 如何从特定选定行的事件发送者数据中获取模型数据?

c# - 将 List<T> 序列化/反序列化为 JSON

c# - XmlSerializer 不使用在类上定义的 XmlRoot

c# - MVC性能: Setting view name vs leaving it blank

c# - 如何将 C# 中的两个 docx word 文件与动态汇编进行比较?

java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?

c++ - 在不同的运行中保持对象状态

sql-server-2005 - 如何将 ILMerge 与 SQL Server 2005 CLR 程序集和 XmlSerializer 一起使用

c# - WCF,xml 创建我想要删除的 ExtensionData 标记