あなたはDataContractSerializerがClient
がContact
のタイプであることを知っているように定義さ。
これを行うにはいくつかの方法がありますが、すべてKnownType
属性またはServiceKnownType
属性を使用しています。
KnownType
は、Client
クラスに配置して、DataContractSerializerにKnockTypeがContact
であることを通知できます。
[DataContract]
[KnownType(typeof(Client))]
public class Contact{}
KnownType
もこのクラスを直列化するときにも、この他のクラスが発生する可能性があることを示すために、クラスに配置することができます。この場合、
[DataContract]
[KnownType(typeof(Client))]
public class Meeting
{
Contact MeetingContact{get;}
}
あなたがKnownTypeを指定せずに逃げることができます:
あなたが実際にClient
が含まれていてもよいContact
である性質を持っているDataContract
クラスを持っている場合は、これを行うことができますクライアント。コレクションを返すプロパティがあり、コレクションに含めることができる型を指定する場合は、これを行うこともできます。
あなたは、代わりにKnownTypeの実際の型を指定するのではなく、既知の型を返します静的メソッドの名前を指定することがあります。
[DataContract]
[KnownType("GetKnownTypes")]
public class Meeting
{
Contact MeetingContact{get;}
private static Type[] GetKnownType()
{
return new Type[]{typeof(Client)};
}
}
あなたはまた、configuration fileを通じて知られているタイプを指定することができます。
ServiceKnownTypesは同様の方法で動作しますが、サービス自体に指定されています
[ServiceKnownType(typeof(Client))]
[ServiceContract()]
public interface IMyServiceContract
{
[OperationContract]
Contact GetContact();
}
このセットアップDataContactSerializerは、のいずれかの方法は、タイプClient
の型を返すことがお知らせします。既知のタイプと同様に、静的メソッドを使用して、サービスの既知のタイプを提供することもできます。
ありがとうございました!ちょうど良い作品 – ancdev
問題はありません。働いている場合は回答として受け入れてください。 – daryal