.net XmlSerializer su proprietà sottoposte a override

Ho una class base con una proprietà astratta:

public abstract int ID {get;set;} 

ora, ho una sottoclass, che è XmlSerialized. Quindi, ha:

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

Non riesco a spostare l’attributo XmlElement in baseclass, poiché ogni sottoclass avrà un nome elemento xml diverso.

Ora, quando deserializzo questa class ottengo il seguente errore:

Il membro ‘Subclass.ID’ nasconde il membro ereditato ‘BaseClass.ID’, ma ha diversi attributi personalizzati.

Cosa posso fare?

La serializzazione e la deserializzazione dei tipi derivati ​​funziona quando le proprietà [XmlAttribute] override hanno attributi [XmlElement] e [XmlAttribute] , aggiungendo un attributo [XmlIgnore] .

La class base può essere resa astratta in modo che non possa mai essere istanziata e quindi serializzata o deserializzata.

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

Rendi la proprietà della class base protetta e non astratta, quindi assegna a ogni class derivata una proprietà con nome appropriato implementata in termini di proprietà della class base:

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