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