我有一个带抽象属性的基类:
public abstract int ID {get;set;}
现在,我有一个子类,它是XmlSerialized。所以,它有:
[XmlElement("something")]
public override int ID {
get { //... }
set { //... }
}
我无法将XmlElement属性移动到baseclass,因为每个子类都有不同的xml元素名。
现在,当我反序列化这个类时,我收到以下错误:
成员'Subclass.ID'隐藏继承 成员'BaseClass.ID',但有 不同的自定义属性。
我该怎么办?
答案 0 :(得分:36)
派生类型的序列化和反序列化在被覆盖的属性具有[XmlElement]
和[XmlAttribute]
属性时通过添加[XmlIgnore]
属性而起作用。
基类可以是抽象的,因此它永远不会被实例化,因此被序列化或反序列化。
[Serializable]
public abstract class Base
{
[XmlIgnore]
public abstract Int32 ID { get; set; }
}
答案 1 :(得分:-1)
使基类属性受保护且非抽象,然后为每个派生类提供一个根据基类属性实现的适当命名属性:
// Base class
protected int InternalID {get; set;}
// Derived class
[XmlElement]
public int SomethingID
{
get {return InternalID;}
set {InternalID = value;}
}