2010-09-17 3 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;} 

Метод BOOL не говорит XmlSerializer никогда не записи, но она все равно будет прочитать. [Browsable] говорит не появляться в вещах, как DataGridView и [EditorBrowsable] говорит не появляться в IntelliSense (относится только к коду, ссылающегося на DLL, а не проект, ни кода в проекте по же).

Смежные вопросы