Ich habe eine abstrakte Klasse. Nennen wir es Lebensform. Es sieht so etwas wie:ASMX Web Service nicht serialisiert abstrakte Basisklasse
public abstract class Lifeform {
public virtual int Legs { get; set; }
public virtual int Arms { get; set; }
public virtual bool Alive { get; set; }
}
(Das virtuelle Attribut auf die Tatsache zurückzuführen ist, dass ich mit nHibernate, die jammert, wenn sie nicht virtuellen Eigenschaften sind.)
ich dann eine Klasse, die erbt aus dieser Lebensformklasse; wir werden es menschlich nennen. Es sieht so etwas wie:
public class Human: Lifeform {
public virtual bool Hat { get; set; }
public virtual int Age { get; set; }
public virtual string Name { get; set; }
}
Alles ist schön, kann ich meine Klassen verwenden, Mensch bekommt die Beine, Arme und Lebend-Eigenschaften, wenn ich es bin mit. Außer, wenn ich versuche, einen Webservice mit der Klasse Mensch zu erstellen. Das serialisierte Objekt gibt mir Hut, Alter und Name - aber keine Legs, Arme oder Lebendigen Eigenschaften.
Ich habe eine Abhilfe gesehen, die
[System.Xml.Serialization.XmlInclude(typeof(Human))]
Auf der Basisklasse (Lifeform) schlägt mit, aber das scheint wie eine schreckliche Hack, der OO verletzt. Setzen Sie Links auf die Basisklasse zu den Klassen, die sie erben? Ew.
Hat jemand schon einmal auf dieses spezielle Problem gestoßen? Hast du irgendwelche Ideen? Ich werde mehr Code zur Verfügung stellen, wenn ein ausführlicheres Beispiel helfen würde zu beschreiben, was ich mehr mache.
Ich hatte das gleiche Problem, und das half mir, es zu lösen. Am Ende stellte ich das Attribut für die Klasse ein, anstatt es zurückzugeben. – Guffa