代碼演示W(wǎng)CF Data Contract序列化引擎案例
WCF經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解WCF Data Contract了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。在WCF Data Contract中如果存在向下造型的情況時(shí)你就會用到KnownTypeAttribute類以保證在反序列化時(shí)引擎能知道應(yīng)該使用哪個(gè)具體的類型。
#T#主要有以下幾種典型的情況:發(fā)送的數(shù)據(jù)契約類型是從接收端期望接收的數(shù)據(jù)契約類型繼承的。聲明的數(shù)據(jù)類型是接口(注意:集合接口除外,具體請看稍后的WCF Data Contract之集合類型),聲明的數(shù)據(jù)類型是Object.在數(shù)據(jù)契約中的數(shù)據(jù)成員包含前面三種的任何一種時(shí)。例如:在Hashtable內(nèi)部使用Object來保存實(shí)際對象,所以在接收端并不能確定其中對象的實(shí)際類型,此時(shí)你需要增加KnownType來告訴反序列化引擎應(yīng)該使用哪個(gè)具體的類型。
- [DataContract]
- public class ClassA
- {
- [DataMember]
- public string name;
- }
- [DataContract]
- public class ClassB : ClassA
- {
- [DataMember]
- public int department;
- [DataMember]
- public string title;
- [DataMember]
- public int salary;
- }
- Public interface InterfaceA
- {
- String GetSomething();
- }
- [DataContract]
- Public calss ImplA:InterfaceA
- {
- Public String GetSomething()
- {
- Return “don’t know”;
- }
- }
- [DataContract]
- Public calss ImplB:InterfaceA
- {
- Public String GetSomething()
- {
- Return “don’t know”;
- }
- }
- [DataContract]
- Public class ClassC{}
- [DataContract]
- Public class ClassD{}
- [DataContract]
- Public class ClassWillProcess
- {
- [DataMember]
- ClassA ca;
- [DataMember]
- InterfaceA ia;
- [DataMember]
- ArrayList arraylist1;
- [DataMember]
- Object numberValue;
- }