重写属性上的.net XmlSerializer

我有一个带有抽象属性的基类:

public abstract int ID {get;set;} 

现在,我有一个子类,它是XmlSerialized。 所以它有:

 [XmlElement("something")] public override int ID { get { //... } set { //... } } 

我无法将XmlElement属性移动到baseclass,因为每个子类都有不同的xml元素名称。

现在,当我反序列化这个类时,我收到以下错误:

成员’Subclass.ID’隐藏inheritance的成员’BaseClass.ID’,但具有不同的自定义属性。

我能做什么?

当重写的属性具有[XmlElement][XmlAttribute]属性时,通过添加[XmlIgnore]属性,派生类型的序列化和反序列化将起作用。

基类可以是抽象的,因此它永远不会被实例化,因此被序列化或反序列化。

 [Serializable] public abstract class Base { [XmlIgnore] public abstract Int32 ID { get; set; } } 

使基类属性受保护且非抽象,然后为每个派生类提供根据基类属性实现的适当命名的属性:

 // Base class protected int InternalID {get; set;} // Derived class [XmlElement] public int SomethingID { get {return InternalID;} set {InternalID = value;} }