Usługa sieciowa ASMX nie serializuje abstrakcyjnej klasy bazowej

Mam klasę abstrakcyjną. Nazwijmy to Lifeform. Wygląda to tak:

public abstract class Lifeform {
    public virtual int Legs { get; set; }
    public virtual int Arms { get; set; }
    public virtual bool Alive { get; set; }
}

(Atrybut wirtualny wynika z faktu, że używam nHibernate, który jęczy, jeśli nie są właściwościami wirtualnymi).

Mam wtedy klasę, która dziedziczy po tej klasie Lifeform; nazwiemy to Człowiekiem. Wygląda to tak:

public class Human: Lifeform {
    public virtual bool Hat { get; set; }
    public virtual int Age { get; set; }
    public virtual string Name { get; set; }
}

Wszystko jest piękne, mogę korzystać z moich zajęć, człowiek dostaje właściwości Nogi, Ramiona i Żywe, gdy z niego korzystam. Z wyjątkiem, gdy próbuję utworzyć usługę internetową przy użyciu klasy Human. Szeregowany obiekt daje mi Hat, Age i Name - ale nie ma właściwości Legs, Arms ani Alive.

Widziałem obejście, które sugeruje użycie

[System.Xml.Serialization.XmlInclude(typeof(Human))]

W klasie bazowej (Lifeform), ale to wydaje się okropnym hackiem, który narusza OO. Umieszczanie linków w klasie bazowej do klas, które ją dziedziczą? Eww.

Czy ktoś wcześniej wpadł na ten konkretny problem? Masz jakieś pomysły? Podam więcej kodu, jeśli bardziej szczegółowy przykład pomoże opisać, co robię więcej.

questionAnswers(2)

yourAnswerToTheQuestion