将"旧"xml反序列化为新的类实例

Has*_*san 4 c# xml serialization

我有一个看起来像的课

public class MyClass
{
    public string EmployerName;
    public string EmployerSurname;
    public string EmploeeName;
    public string EmploeeSurname;
}
Run Code Online (Sandbox Code Playgroud)

我已经重构了上面的代码:

public class MyClass
{
    public MyClass()
    {
        Employer = new PersonInfo();
        Emploee = new PersonInfo();
    }

    public class PersonInfo
    {
        public string Name;
        public string Surname;
    }
    public PersonInfo Emploee;
    public PersonInfo Employer;

    [Obsolete]
    public string EmploeeName
    {
        get
        {
            return Emploee.Name;
        }
        set
        {
            Emploee.Name = value;
        }
    }
    [Obsolete]
    public string EmploeeSurname
    {
        get
        {
            return Emploee.Surname;
        }
        set
        {
            Emploee.Surname= value;
        }
    }
    [Obsolete]
    public string EmployerName
    {
        get
        {
            return Employer.Name;
        }
        set
        {
            Employer.Name = value;
        }
    }
    [Obsolete]
    public string EmployerSurname
    {
        get
        {
            return Employer.Surname;
        }
        set
        {
            Employer.Surname = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,当反序列化从旧类版本序列化的XML时,我希望新属性可以工作,内部对象的字段将被填充,但它们不会.

除了实现IXmlSerializable之外,我还可以修改新类以支持新旧版本的XML吗?或者IXmlSerializable是唯一的方法?

Mar*_*ell 5

您是否只想支持旧的反序列化?如果是这样,你可以:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string EmploeeName {
    get { return Emploee.Name; }
    set { Emploee.Name = value; }
}
public bool ShouldSerializeEmploeeName() { return false;}
Run Code Online (Sandbox Code Playgroud)

bool方法告诉XmlSerializer永远不要这个,但它仍然会被读取.[Browsable]告诉它不要出现在类似的东西中DataGridView,并[EditorBrowsable]告诉它不要出现在intellisense中(仅适用于引用dll的代码,不适用于项目,也不适用于同一项目中的代码).