(转)Web Services使用多态(XmlInclude) ,支持自定义类型

Web Services使用多态(XmlInclude)

      在Web Services方法中,往往使用的都是一个具体类型的参数,这个参数一般就是一个数据对象。ASP.NET Web Services通过声明XmlIncludeAttribute可以实现Web Services方法中运用多态。

     XmlIncludeAttribute允许XmlSerializer在序列化火反序列化对象时识别类型。当应用XmlIncludeAttribute时,需指定派生类的Type。XmlSerializer序列化同时包含基类和派生类的对象之后,它就可以识别两种对象类型。

     首先定义基类Vehicle和派生类Car:

 1:  public abstract class Vehicle
 2:  {
 3:      public string LicenseNumber{get;set;}
 4:      public DateTime MakeTime { get; set; }
 5:  }
 6:   
 7:  public class Car : Vehicle
 8:  {
 9:      public int DoorNum { get; set; }
10:  }
11:   

       定义AddVehicle的Web Method,声明XmlInclude需要添加对命名空间System.Xml.Serialization的引用:

1:  [WebMethod]
2:  [XmlInclude(typeof(Car))]
3:  public void AddVehicle(Vehicle vehicle)
4:  {
5:   
6:  }
7:   

       查看生成的wsdl,wsdl利用extension的base属性来描述Car继承Vechicle。

image

         查看引用Web Services生成的Reference.cs文件,Vehicle类会有XmlIncludeAttribute的声明:

1:      [System.Xml.Serialization.XmlIncludeAttribute(typeof(Car))]
2:      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
3:      [System.SerializableAttribute()]
4:      [System.Diagnostics.DebuggerStepThroughAttribute()]
5:      [System.ComponentModel.DesignerCategoryAttribute("code")]
6:      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
7:      public abstract partial class Vehicle : object
8:  

         客户端测试代码:

 1:  static void Main(string[] args)
 2:  {
 3:      localhost.WebService1SoapClient c = new localhost.WebService1SoapClient();
 4:      localhost.Car car = new localhost.Car() { 
 5:                                                   LicenseNumber="0001",
 6:                                                   MakeTime=DateTime.Now,
 7:                                                   DoorNum=2
 8:                                               };
 9:      c.AddVehicle(car);
10:  }
11:   

        在Web Services的AddVehicle方法可以查看传过来的参数:

image

        Web Services可以支持多态,不过仅仅限制在可以直接引用Web Services的时候有生成可序列化的代码时能够使用,要在其他的客户端使用还是得费一番周折。

source:http://www.cnblogs.com/zhaozhan/archive/2010/10/25/1860867.html

转载于:https://www.cnblogs.com/zhouchaoyi/articles/1861152.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激光破解太空通信难题

来源:新浪科技摘要:虽然目前而言无线电天线仍然是太空通信的支柱,但目前未来发展方向是激光通讯系统。在太空中,没有人会听到你的尖叫——因为声音不会在真空中传播,而且你需要某种类型的无线电波中继携载这些信息&…

Docker 原理、学习教程

Docker 官网 :https://www.docker.com/ Docker Hub:https://registry.hub.docker.com/search?qkali Docker 容器超详细讲解:https://www.linuxidc.com/Linux/2018-08/153712.htm Docker Compose:https://www.runoob.com/docker…

从自动驾驶到基因编辑,这15项发明专利改变了世界

来源:资本实验室近期,中兴通讯受美国制裁的事件戳中了国人心中的“痛”,也对我们长期受制于人的芯片核心技术与产业敲响了警钟。我们近乎被动地发现,在科技创新,尤其是技术驱动型创新方面,我们的差距到底有…

org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory

引入cryptofront-2.1.6.jar后dom4j执行异常 解决方案,强制在cryptofront-2.1.6.jar加载前,加载dom4j dom4j引入不完整

Cheat Engine 教程( 1 - 9 通关 )

工具包:https://down.52pojie.cn/Tools/Debuggers/ Cheat Engine 官网:https://www.cheatengine.org/ ce 修改器绿色版(cheat engine) v7.4 官方最新版:http://www.downcc.com/soft/21673.html 这个教程全部是来自 Cheat Engine 软件的中的…

人工智能元老痛批IBM:沃森是个骗局,这根本不是认知

作者 Roger Schank李林 编译整理量子位 出品 | 公众号 QbitAI一篇质疑IBM的旧文今天在HackerNews上火了起来,虽已时隔两年,这篇文章还是引起了网友们的强烈共鸣。文章作者Roger Schank是AI领域元老人物,AAAI Fellow,曾任耶鲁大学人…

OllyDBG完美教程(超强入门级)

OllyDBG 视频教程:https://www.bilibili.com/video/av6889190 动态调试工具之OllyDbg(OD)教程:https://www.bilibili.com/video/av70600053 使用 OllyDbg 从零开始 Cracking.chm ( 58章 ):https://pan.baidu.com/s/18iXvF5I_No4-a1DK3jKrbg …

12种Bean转换

来源:再见 BeanUtils!性能真拉跨! 一、前言 二、性能测试对比 三、12种转换案例 1. get\set 2. json2Json 3. Apache copyProperties 4. Spring copyProperties 5. Bean Mapping 6. Bean Mapping ASM 7. BeanCopier 8. Orika 9. Do…

上海人工智能再出重磅!寒武纪科技发布新一代云端AI芯片,联想、曙光、科大讯飞发布相关应用...

来源:文汇网 作者:许琦敏、郭超豪峰值功耗不超过110瓦,等效理论峰值速度可达每秒166.4万亿次定点运算。寒武纪科技在上海发布了中国第一款云端智能芯片——Cambricon MLU100芯片和板卡产品、寒武纪1M终端智能处理器IP产品。联想、曙光和科大…

OD 快捷键使用大全。非常详细( 游戏逆向分析必看 )+ OD 断点 使用大全

From:https://www.cnblogs.com/YiShen/p/9742872.html OllyDBG 快捷键 OllyDbg 窗口通用快捷键 快捷键    功能      Ctrl F2重启程序,即重新启动被调试程序( 重新载入程序 )。如果当前没有调试的程序,Oll…

电子发票中数字签名的提取解析

前言 随着电子信息技术的发展与成熟,加上国家的大力推广,电子发票已经开始慢慢取代纸质发票。相比传统的纸质发票,电子发票除了绿色环保,节约成本之外,更重要的是电子发票采取电子签章实现发票签名、电子盖章&#xff…

无人车、超级高铁、智慧城市......这是一份来自未来的出行报告

来源:机器之能 作者:Charles McLellan 编译:王宇欣在新兴技术的驱动下,运输业即将迎来第二春。虽然个中细节还需打磨,但未来的运输系统必然会实现数据驱动、彼此相关联、高度自动化。有关技术与运输业未来的文章比比皆…

在 VC++ 中使用 内联汇编

From:https://blog.csdn.net/root19881111/article/details/8450266 VC内联汇编(MSDN相关内容完整翻译):http://www.cppblog.com/xingkongyun/archive/2008/12/21/70003.html 调 call 和 偷功能 时,VC中内联汇编容易产生的错误:…

OFD 版式技术解析系列(一):开篇

在版式电子文件领域,大家比较熟悉的就是 PDF(Portable Document Format)格式,该格式由 Adobe 公司在 1992 年发布,迄今已经有 28 个年头,2008 年 7 月 1 日,IS 组织正式发布 PDF 的国际标准,PDF 成为了独立…

无人驾驶急需解决:规划控制和传感器价格高两大问题

来源:AI科技大本营 作者 :Mavis2017 年百度 AI 开发者大会上,现场视频连线了正乘坐无人驾驶汽车行驶在五环上朝会场赶来的李彦宏,他坐在副驾驶上解说,身边司机的双手并没有触碰方向盘,也正是因为这句话&am…

CString 与 LPCWSTR、LPSTR、char*、LPWSTR 等类型的转换

From:https://www.cnblogs.com/leanee/articles/2940088.html char [] 到 LPWSTR转换的一个具体应用:http://www.cppblog.com/lateCpp/articles/153358.html CString详细讲解:https://blog.csdn.net/qq_41786318/article/details/81989217 …

ofd电子文档内容分析工具(分析文档、签章和证书)

前言 ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。 加入QQ交流群:618168615。获取下载程序。 ofd文件解压后,可以看到…

关于信任

[caption id"attachment_349" align"alignnone" width"374" caption"Trust is the most important thing to the team!"][/caption] 偶然间看到一张截图,是杭州小马哥不知何年何月何地做的show,这句话从他嘴里讲…

ES的安装和RestClient的操作

目录 初识elasticsearch 什么是elasticsearch elasticsearch的发展 Lucene的优缺点 elasticsearch的优势 倒排索引 es与mysql的概念对比 文档 索引 概念对比 架构 安装es 安装kibana 安装ik分词器 分词器 安装ik分词器 ik分词器的拓展和停用词典 操作索引库…

深度 | 智慧•城市,基于国际视野下的思考

来源:智慧城市决策参考智慧城市的兴起,得益于ICT技术的迅猛发展。经过这些年国内外诸多城市的探索和实践,智慧城市已经从最初的营销概念,逐渐发展成为一种支持城市发展的新理念。然而在实际应用中,智慧城市的内涵仍然是…