我有一个看起来像
的课程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可能是唯一的方法吗?
答案 0 :(得分:5)
您是否只想支持反序列化的旧版本?如果是这样,你可以:
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string EmploeeName {
get { return Emploee.Name; }
set { Emploee.Name = value; }
}
public bool ShouldSerializeEmploeeName() { return false;}
bool方法告诉XmlSerializer
永远不要写这个,但它仍然是 read 。 [Browsable]
告诉它不要出现在DataGridView
之类的内容中,[EditorBrowsable]
告诉它不要出现在intellisense中(仅适用于引用 dll 的代码,而不是项目,相同的项目中的代码。)