Verfügbarmachen von Objekten (Datacontracts), die nicht direkt von einem WCF-Dienst verwendet werden?

StackOverflow https://stackoverflow.com/questions/722982

Frage

Ich habe einige Objektklassen, die Vererbung. Es scheint, dass ich nur Zugriff auf die Objekte bekommen, die von einem Service direkt verwendet werden. Lassen Sie mich Ihnen zeigen, was ich zu erreichen versuchen:

[DataContract]
public class Object1
{
   [DataMember]
   int Id {get; set;}
}

[DataContract]
public class object2: Object1
{
   [DataMember]
   string Name {get; set;}
}

[DataContract]
public class object3 
{
    [DataMember]
    int SomeNumber {get; set;}
}

Der Service:

public int GetId(object2 obj)
{
    return GetTheId(object2.Name);
}

Nun, da ich im Dienst bin mit object2, wird object1 zu serialisiert. Howerver, möchte ich kann aus irgendeinem Grund ausgesetzt Objekt3 haben. Es kann eine abgeleitete Klasse, die ich weitergeben müssen, so dass seine Art später für ein anderes Verfahren bestimmt werden kann. Ich sehe nicht, dieses Objekt serialisiert zu werden. Ich nahm an, wenn Sie die Datacontract / Datamember diese Objekte setzen würde serialisiert bekommen. Es macht keinen Sinn, etwas zu machen, die nicht beginnen verwendet wird, weil ich ein Problem mit Belichtungs Artikel, können Sie nicht benötigen. Was ist der beste Weg, um Objekte zu machen, die nicht direkt von einem Dienst verwendet werden? Dank

Daniel

War es hilfreich?

Lösung

Sie sollten object2 (eigentümliche Namen für eine Klasse :)) mit der Knowntype Attribut :

[DataContract]
[KnownType(typeof(object3))]
public class object2 
{
}

Angenommen, Sie bedeuten Objekt3 eine Unterklasse von object2 ist:

public class object3: object2
{
}

Andere Tipps

Ich glaube, Sie Ihre eigene Frage beantwortet. Wenn die Mitglieder nicht von dem Dienst verwendet werden, dann sollte man sie nicht auszusetzen sein. Es ist immer besser, die minimale Menge von Daten, die durch den Dienst erforderlich ist, um aufzudecken, wie es in der Regel Wartbarkeit des Dienstes zu erhöhen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top