WCF集合类型各种限制于规则
WCF开发插件中,有很多内容值得我们去深入的研究。我们需要在不断的实践中去积累应用技巧,来满足我们的应用需求。在这里我们就为大家介绍一下其中一个比较基础的知识,WCF集合类型的相关概念。#t#
WCF集合类型的要求限制
不是所有的集合类型都可以在WCF中使用,只有满足以下要求才可以使用:
该集合类型有一个缺省的构造函数
该集合类型有一个名为Add的方法
这是因为在反序列化集合类型时,WCF框架首先调用该集合类型的无参数的构造函数,然后通过非静态的Add方法来将循环元素增加到集合中。所以以上限制主要是针对反序列化而设定的。
WCF集合类型中的一些高级规则
WCF框架在序列化时支持集合的集合,也支持数组的数组(交错数组),但不支持多唯数组。
字节数组和 XmlNode 数组是特殊的数组类型,将被视为基元,而不是集合。 序列化字节数组会产生单个包含一个 Base64 编码数据块的 XML 元素,而不是为每个字节都生成一个单独的元素。(笔者认为这是为了性能的考虑才这么处理的。)
如果集合类型实现了IXMLSerializable接口,假设类型为MyType:IList<string>,IXMLSerializable{…},WCF框架将根据在数据契约中声明的类型来进行序列化,如果声明的是集(接口)如IList<string>,那么该类型将被认为是列表集合来序列化,如果声明的是IXMLSerializable,那么将按照IXMLSerializable来进行序列化,当然需要将该类型加到KnowType类型列表中。如果声明的是该类型本身(如MyType),那么将按照IXMLSerializable的规则来进行序列化。
在对集合进行序列化时,将调用集合类的GetEnumerator 方法来得到集合的内容,在反序列化时将首先调用该集合类型的无参数的构造函数,然后通过非静态的Add方法来将循环元素增加到集合中。(注:虽然这与大家在MSDN的帮助文档中看到的不同,认为字典集合将调用get_Keys和get_Values,以及IList将调用索引器,但笔者使用VS2008验证时没有得到以上方法被调用的结论,所以笔者认为是MSDN文档滞后或有误,如果各位看官能得到和MSDN吻合的结论麻烦告诉一声。)
如果集合类型同时应用了Serialized属性或实现了ISerializable接口,WCF框架将忽略它们;但是如果集合类型不满足集合类型要求(例如缺少Add)方法,那么将按照Serialized或ISerializable来处理;但如果你对该集合同时应用了CollectionDataContract属性而且又不满足集合要求,那么将抛出InvalidDataContractException,而不是按照Serialized或ISerializable来处理。
不能向实现了IXmlSerializable接口的类型使用CollectionDataContractAttribute属性,否则会抛出InvalidDataContractException.向非集合应用CollectionDataContractAttribute属性以及非字典集合指定KeyName或者ValueName属性也都将抛出此异常。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /news/detail/tanhbkeiac
-
2023 年度 A 类学科竞赛项目清单
那个人有梦想 09-16 -
从《银行业金融机构数据治理指引》监管要求看商业银行数据能力建设
51CTO 09-21 -
爱思唯尔的ESWA——模板、投稿、返修、接收的
老板来碗小面加蛋~ 09-16 -
国航天科技集团公司的各个研究院
知识在于积累 09-17 -
全球WIFI功率信号最强的国家清单,无线WIFI调优
Cisco_VIP 09-17 -
ChatGPT注册流程攻略,含验证码接收
PHP中文网 05-29 -
AI绘画Midjourney的咒语关键词汇
毕设小程序软件程序猿 09-17 -
创作者身份认证申请规则和审核标准
CSDN官方博客 09-16 -
的10 个顶尖的国内外设计网站
四喜圆子- 09-16 -
OBS做绿幕直播滤镜实现去掉绿色背景
视频砖家 09-16