Ich habe eine Basisklasse mit DataMember-Eigenschaften darin. Ich habe auch eine abgeleitete Klasse mit DataMember-Eigenschaften darin. In meinem WCF-Projekt gebe ich die abgeleitete Klasse zurück. Gibt es eine Möglichkeit für mich zu verhindern, dass ein Mitglied in meiner Basisklasse serialisiert? Hier ist ein Beispielcode:WCF DataContract Ausschluss von DataMembers Serialisierung in abgeleiteten Klassen
public class BaseClass
{
public string ShortDescription {get;set;}
public string LongDescription {get;set;}
}
public class DerivedClass : BaseClass
{
public List<Description> Descriptions {get;set;}
}
In diesem Code Ich möchte in der Lage sein, die geerbten Mitglieder Kurze inhaltliche Beschreibung und longdescription zu verstecken, weil sie jetzt veraltet sind. Versuche, dies zu tun, waren nicht erfolgreich. Hier ist, was ich habe versucht:
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// override the base class members
[IgnoreDataMember]
public override string ShortDescription {get;set;}
[IgnoreDataMember]
public override string LongDescription {get;set;}
}
und
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// shadow the base class members
[IgnoreDataMember]
public new string ShortDescription {get;set;}
[IgnoreDataMember]
public new string LongDescription {get;set;}
}
Keiner dieser Ansätze gearbeitet haben. Der Typ "DerivedClass" bei der Ausgabe in die WSDL enthält weiterhin die Elemente "Ignored" des Basisklassentyps.
Sie fragen sich vielleicht, warum ich nicht nur die Basisklasse ändere. Dies liegt daran, dass ich die Basisklasse immer noch in ihrer ursprünglichen Form als vorherige Version des Typs für die WSDL verwende, um die Abwärtskompatibilität für die Benutzer zu unterstützen. Auf diese Weise kann ich einen v1000-Aufruf haben, der BaseClass zurückgibt, und einen V1010-Aufruf, der eine DerivedClass zurückgibt. Ich kann die Funktionalität der DerivedClass hinzufügen und ändern, ohne dass ich die Möglichkeit habe, die Benutzer der v1000-Funktionalität zu beeinflussen.
Dies führt zu demselben Ergebnis. Interessanterweise wird das Überschreiben und Bereitstellen des Attributs [DataMember], um es in der XML-Definition für die DerivedClass anzuzeigen, nicht in der DerivedClass, sondern in der Basisklasse angezeigt. – omatase
Hrmmpf ... yep, das funktioniert nicht;) – Kwal