WCF DataContract Ausschließen DataMembers Aus, die Serialisiert Werden, In Abgeleiteten Klassen

Ich habe eine base-Klasse mit DataMember-Eigenschaften in ihm. Ich habe auch eine abgeleitete Klasse mit dem DataMember-Eigenschaften in ihm. In meinem WCF-Projekt bin ich wieder der abgeleiteten Klasse. Gibt es eine Möglichkeit für mich, um zu verhindern, dass ein Mitglied in meiner Basisklasse, von serialisieren? Hier finden Sie einige Beispiel-code:

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 möchte ich in der Lage sein sich zu verstecken die geerbten member Kurzbeschreibung und LongDescription, weil Sie die nun veraltet sind. Alle versuche, so zu tun, waren erfolglos. Hier ist was ich versucht habe:

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 funktioniert haben. Die "DerivedClass" geben, wenn die Ausgabe auf die WSDL enthält noch die "Ignorierte" Mitglieder der Basisklasse-Typ.

Kann man sich Fragen, warum bin ich nicht einfach die änderung der Basis-Klasse. Das ist, weil ich immer noch die Basis-Klasse in seine ursprüngliche form, wie in der vorherigen version von der Art, die für die WSDL zur Unterstützung der Abwärtskompatibilität für die Verbraucher. Auf diese Weise kann ich ein v1000-Aufruf zurückgibt, die BaseClass und ein V1010 nennen, gibt eine DerivedClass. Ich kann hinzufügen und ändern von Funktionen, um die DerivedClass alles was ich will, ohne das Potenzial für die Verbraucher der v1000-Funktionalität.

InformationsquelleAutor omatase | 2010-08-26
Schreibe einen Kommentar