WCF经过长时间的发展,很多用户都很了解WCF Data Contract了,这里我发表一下个人理解,和大家讨论讨论。在WCF Data Contract中如果存在向下造型的情况时你就会用到KnownTypeAttribute类以保证在反序列化时引擎能知道应该使用哪个具体的类型。
#T#主要有以下几种典型的情况:发送的数据契约类型是从接收端期望接收的数据契约类型继承的。声明的数据类型是接口(注意:集合接口除外,具体请看稍后的WCF Data Contract之集合类型),声明的数据类型是Object.在数据契约中的数据成员包含前面三种的任何一种时。例如:在Hashtable内部使用Object来保存实际对象,所以在接收端并不能确定其中对象的实际类型,此时你需要增加KnownType来告诉反序列化引擎应该使用哪个具体的类型。
- [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;
- }