你定義讓DataContractSerializer的知道,一個Client
是一種類型的Contact
。
有幾種方法可以做到這一點,但都是圍繞着使用KnownType
屬性或ServiceKnownType
屬性。
可以將KnownType
放置在Client
類上,以告訴DataContractSerializer它是已知類型Contact
。
[DataContract]
[KnownType(typeof(Client))]
public class Contact{}
的KnownType
也可以放在一類,表明這個串行化類時,你可能還會遇到這樣其他類。
您可能希望這樣做,如果你有一個DataContract
類有一個屬性,它是一個Contact
實際上可能包含Client
:
[DataContract]
[KnownType(typeof(Client))]
public class Meeting
{
Contact MeetingContact{get;}
}
在這種情況下,你可以逃脫不上指定KnownType客戶端。如果您有一個返回集合的屬性並且您想要指定集合中的類型,那麼您可能還想這樣做。
你可以,而不是指定的實際類型的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