Tengo una clase abstracta. Vamos a llamarlo Lifeform. Se ve algo como:Servicio web ASMX que no serializa clase base abstracta
public abstract class Lifeform {
public virtual int Legs { get; set; }
public virtual int Arms { get; set; }
public virtual bool Alive { get; set; }
}
(El atributo virtual es debido al hecho de que estoy usando NHibernate, que se queja si no son propiedades virtuales.)
entonces tengo una clase que hereda de esa clase Lifeform; lo llamaremos Humano. Se ve algo como:
public class Human: Lifeform {
public virtual bool Hat { get; set; }
public virtual int Age { get; set; }
public virtual string Name { get; set; }
}
Todo es precioso, puedo usar mis clases, Human pone las piernas, los brazos y las propiedades vivo cuando lo estoy usando. Excepto, es decir, cuando intento hacer un servicio web usando la clase humana. El objeto serializado me otorga Sombrero, Edad y Nombre, pero no propiedades de Piernas, Armas o Vivas.
he visto una solución que sugiere el uso
[System.Xml.Serialization.XmlInclude(typeof(Human))]
En la clase base (de forma de vida), pero que parece como un horrible truco que viole OO. Poniendo enlaces en la clase base a las clases que lo heredan? Eww.
¿Alguien se ha encontrado con este problema específico antes? ¿Tienes alguna idea? Proporcionaré más código si un ejemplo más profundo ayudaría a describir lo que estoy haciendo más.
Tuve el mismo problema, y esto me ayudó a resolverlo. Sin embargo, terminé configurando el atributo en la clase en lugar del método para devolverlo. – Guffa