Веб-сервис ASMX не сериализует абстрактный базовый класс

У меня есть абстрактный класс. Давайте назовем это Lifeform. Это выглядит примерно так:

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

(Виртуальный атрибут связан с тем, что я использую nHibernate, который жалуется, если они не являются виртуальными свойствами.)

Затем у меня есть класс, который наследуется от этого класса Lifeform; мы назовем это человеком. Это выглядит примерно так:

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

Все прекрасно, я могу использовать свои классы, Человек получает свойства Legs, Arms и Alive, когда я использую его. За исключением случаев, когда я пытаюсь создать веб-сервис с использованием класса Human. Сериализованный объект дает мне Hat, Age и Name, но не имеет свойств Legs, Arms или Alive.

Я видел обходной путь, который предлагает использовать

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

На базовом классе (Lifeform), но это похоже на ужасный хак, который нарушает ОО. Положить ссылки на базовый класс на классы, которые его наследуют? Eww.

Кто-нибудь сталкивался с этой конкретной проблемой раньше? Есть идеи? Я предоставлю больше кода, если более подробный пример поможет описать то, что я делаю больше.

Ответы на вопрос(2)

Ваш ответ на вопрос