【问题标题】:Deserializing "old" xml into new class instance将“旧”xml 反序列化为新的类实例
【发布时间】:2010-09-17 10:42:06
【问题描述】:

我的课看起来像

public class MyClass
{
    public string EmployerName;
    public string EmployerSurname;
    public string EmploeeName;
    public string EmploeeSurname;
}

我已将上面的代码重构为:

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;
        }
    }

问题是,在反序列化从旧类版本序列化的 XML 时,我希望新属性能够工作,并且内部对象的字段会被填充,但他们没有。

除了实现 IXmlSerializable 之外,我还有什么想法可以修改新类以同时支持新旧版本的 XML?或者也许 IXmlSerializable 是唯一的方法?

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

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

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

    bool 方法告诉XmlSerializer 永远不要这个,但它仍然会被[Browsable] 告诉它不要出现在DataGridView 之类的东西中,[EditorBrowsable] 告诉它不要出现在智能感知中(仅适用于引用 dll 的代码,而不是 project em>,也不是 same 项目中的代码)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多