全面分析WCFKnownType

WCF经过长时间的发展,很多用户都很了解WCF了,这里我发表一下个人理解,和大家讨论讨论。大家请注意ClassWillProcessl类型,我们需要增加哪些类型到KnownType中呢?如果我们在应用中可能将ClassB的实例赋值给ca的话,我们需要增加ClassB到KnowType中([KnowType(typeof(ClassB))]),因为ClassB派生于ClassA,所以在反序列化时存在向下造型。如果不存在这种可能性的话,可以不加。

创新互联公司是一家专注于成都网站建设、网站建设与策划设计,綦江网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:綦江等地区。綦江做网站价格咨询:18980820575

#T#由于ia的声明类型是一个接口,所以我们需要将接口的实现类加到WCF KnownType中。在这里是ImplA和ImplB。试想一下,如果我们只增加了ImplA到KnownType中,并且我们将ImplB的实例赋给了ia,反序列化引擎还是会将其反序列化成ImplA,因为它只知道ImplA.如果我们arraylist1集合中可能会将ClassC和ClassD放入其中,由于非泛型集合都是使用Object来保存实际对象,所以我们也需要将ClassC和ClassD加入到WCF KnownType中。如果我们也希望将一个int的数组存放在numberValue中(当然在实际情况中很少发生),我么也需要将int[]加入到WCF KnownType中。

增加了KnownType的ClassWillProcessl类型如下:

 
 
  1. [DataContract]  
  2. [KnowType(typeof(ClassB))]  
  3. [KnowType(typeof(ImplA))]  
  4. [KnowType(typeof(ImplB))]  
  5. [KnowType(typeof(ClassC))]  
  6. [KnowType(typeof(ClassD))]  
  7. [KnowType(typeof(int[]))]  
  8. Public class ClassWillProcess  
  9. {  
  10. [DataMember]  
  11. ClassA ca;  
  12. [DataMember]  
  13. InterfaceA ia;  
  14. [DataMember]  
  15. ArrayList arraylist1;  
  16. Object numberValue;   
  17. [DataMember]  
  18. Public object Numbers  
  19. {  
  20. get {return numberValue;}  
  21. set {numberValue=value;}  
  22. }  
  23. }  

网站名称:全面分析WCFKnownType
转载来于:http://www.shufengxianlan.com/qtweb/news39/270289.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联