I have a base class with an abstract property:
public abstract int ID {get;set;}
now, I have a subclass, which is XmlSerialized. So, it has:
[XmlElement("something")]
public override int ID {
get { //... }
set { //... }
}
I cannot move the XmlElement attribute to baseclass, since every subclass will have a different xml elementname.
Now, when I deserialize this class I get the following error:
Member 'Subclass.ID' hides inherited member 'BaseClass.ID', but has different custom attributes.
What can I do?
Make the base class property protected and non-abstract, then give each derived class an appropriately named property implemented in terms of the base class property:
Serialization and deserialization of derived types works when the overridden properties have
[XmlElement]
and[XmlAttribute]
attributes, by adding an[XmlIgnore]
attribute.The base class can be made abstract so that it can never be instantiated and therefore serialized or deserialized.