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类型如下:
- [DataContract]
- [KnowType(typeof(ClassB))]
- [KnowType(typeof(ImplA))]
- [KnowType(typeof(ImplB))]
- [KnowType(typeof(ClassC))]
- [KnowType(typeof(ClassD))]
- [KnowType(typeof(int[]))]
- Public class ClassWillProcess
- {
- [DataMember]
- ClassA ca;
- [DataMember]
- InterfaceA ia;
- [DataMember]
- ArrayList arraylist1;
- Object numberValue;
- [DataMember]
- Public object Numbers
- {
- get {return numberValue;}
- set {numberValue=value;}
- }
- }
网站名称:全面分析WCFKnownType
转载来于:http://www.shufengxianlan.com/qtweb/news39/270289.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联