J’ai une classe de base avec une propriété abstraite:
public abstract int ID {get;set;}
maintenant, j’ai une sous-classe, qui est XmlSerialized. Donc, il a:
[XmlElement("something")] public override int ID { get { //... } set { //... } }
Je ne peux pas déplacer l’atsortingbut XmlElement vers la classe de base, car chaque sous-classe aura un nom d’élément xml différent.
Maintenant, quand je désérialise cette classe, l’erreur suivante apparaît:
Le membre ‘Subclass.ID’ masque le membre hérité ‘BaseClass.ID’, mais possède des atsortingbuts personnalisés différents.
Que puis-je faire?
La sérialisation et la désérialisation des types dérivés fonctionnent lorsque les propriétés remplacées ont les [XmlElement]
et [XmlAtsortingbute]
en ajoutant un atsortingbut [XmlIgnore]
.
La classe de base peut être rendue abstraite de sorte qu’elle ne puisse jamais être instanciée et donc sérialisée ou désérialisée.
[Serializable] public abstract class Base { [XmlIgnore] public abstract Int32 ID { get; set; } }
Rendez la propriété de la classe de base protégée et non abstraite, puis atsortingbuez à chaque classe dérivée une propriété nommée de manière appropriée et implémentée en termes de propriété de la classe de base:
// Base class protected int InternalID {get; set;} // Derived class [XmlElement] public int SomethingID { get {return InternalID;} set {InternalID = value;} }