Ho una classe astratta. Chiamiamo Lifeform. Sembra qualcosa di simile:Servizio Web ASMX che non serializza la classe base astratta
public abstract class Lifeform {
public virtual int Legs { get; set; }
public virtual int Arms { get; set; }
public virtual bool Alive { get; set; }
}
(L'attributo virtuale è dovuto al fatto che sto usando NHibernate, che si lamenta se non sono le proprietà virtuali.)
Ho poi avere una classe che eredita da quella classe Lifeform; lo chiameremo umano. Sembra qualcosa di simile:
public class Human: Lifeform {
public virtual bool Hat { get; set; }
public virtual int Age { get; set; }
public virtual string Name { get; set; }
}
Tutto molto bello, posso usare le mie classi, umano ottiene i gambe, braccia, e le proprietà vivo quando sto usando. Tranne, quando cerco di creare un servizio web usando la classe Human. L'oggetto serializzato mi fornisce Hat, Age e Name - ma non le proprietà Legs, Arms o Alive.
ho visto una soluzione che suggerisce di utilizzare
[System.Xml.Serialization.XmlInclude(typeof(Human))]
sulla classe di base (Lifeform), ma che sembra un hack orribile che viola OO. Mettere i collegamenti sulla classe base alle classi che lo ereditano? Eww.
Qualcuno ha incontrato prima questo problema specifico? Hai qualche idea? Fornirò più codice se un esempio più approfondito potrebbe aiutare a descrivere quello che sto facendo di più.
Ho avuto lo stesso problema e questo mi ha aiutato a risolverlo. Ho finito per impostare l'attributo sulla classe invece del metodo restituendolo, comunque. – Guffa