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

У меня есть абстрактный класс. Позволять'S называют это 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; }
}

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

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

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

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

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

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

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