Ich habe eine abstrakte Klasse namens contact und eine andere Klasse namens client, die von contact erbt. Ich habe einen WCF-Dienst mit einer Methode, die einen Parameter vom Typ contact verwendet. Was ich jedoch habe, ist eine Instanz von Client, die ich weitergeben möchte. Im Angesicht dieses Fehlers:
Geben Sie 'xxx.Client' mit dem Datenvertragsnamen 'Client: http: //schemas.datacontract.org/2004/07/xxx' nicht ein. Fügen Sie statische Typen, die der Liste bekannter Typen nicht bekannt sind, hinzu, z. B. indem Sie das KnownTypeAttribute-Attribut verwenden oder diese zur Liste bekannter Typen hinzufügen, die an DataContractSerializer übergeben werden.
Sie sollten DataContractSerializer wissen lassen, dass ein Client
ein Typ von Contact
ist.
Es gibt mehrere Möglichkeiten, dies zu tun, aber alle drehen sich um die Verwendung des KnownType
Attribut oder die ServiceKnownType
Attribute.
Der KnownType
kann in der Klasse Client
platziert werden, um DataContractSerializer mitzuteilen, dass es sich um einen KnownType von Contact
handelt.
Der KnownType
kann auch in einer Klasse platziert werden, um anzuzeigen, dass Sie beim Serialisieren dieser Klasse auch auf diese andere Klasse treffen können.
Sie können dies tun, wenn Sie eine Klasse DataContract
mit einer Eigenschaft haben, die eine Contact
ist, die tatsächlich eine Client
enthalten kann:
In diesem Fall könnten Sie ohne Angabe des KnownType auf dem Client davonkommen. Sie können dies auch tun, wenn Sie über eine Eigenschaft verfügen, die eine Auflistung zurückgibt und Sie die Typen angeben möchten, die in der Auflistung enthalten sein können.
Sie können anstelle des tatsächlichen Typs des KnownType den Namen einer statischen Methode angeben, die stattdessen die bekannten Typen zurückgibt:
%Vor%Sie können den bekannten Typ auch über die angeben Konfigurationsdatei .
ServiceKnownTypes funktionieren auf ähnliche Weise, sind jedoch im Dienst selbst angegeben:
%Vor% Diese Einstellung wird dem DataContactSerializer mitteilen, dass eine der Methoden möglicherweise den Typ Client
zurückgibt. Ähnlich wie bei den bekannten Typen können Sie auch eine statische Methode verwenden, um die bekannten Dienste bereitzustellen.
Verwenden Sie die [KnownType] und [ServiceKnownType] Attribute, um die Beziehungen zu gewährleisten.
Tags und Links wcf c# silverlight inheritance