2010-09-17 34 views
4

我有看起來像反序列化「老」 XML轉換成新的類實例

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是唯一的方法?

回答

5

你只想支持舊的反序列化?如果是這樣,你可以有:

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

的布爾方法告訴XmlSerializer從未這一點,但它仍然是閱讀[Browsable]告訴它不要出現等東西DataGridView,並[EditorBrowsable]告訴它不會出現在智能感知(僅適用於代碼引用DLL,而不是項目,也不代碼在相同項目)。