美图齐众专注资阳网站设计 资阳网站制作 资阳网站建设
资阳网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

WCF集合类型各种限制于规则介绍

WCF开发插件中,有很多内容值得我们去深入的研究。我们需要在不断的实践中去积累应用技巧,来满足我们的应用需求。在这里我们就为大家介绍一下其中一个比较基础的知识,WCF集合类型的相关概念。#t#

创新互联建站10多年企业网站制作服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站制作及推广,对宣传片制作等多个行业拥有多年的网站运维经验的网站建设公司。

WCF集合类型的要求限制

不是所有的集合类型都可以在WCF中使用,只有满足以下要求才可以使用:

该集合类型有一个缺省的构造函数

该集合类型有一个名为Add的方法

这是因为在反序列化集合类型时,WCF框架首先调用该集合类型的无参数的构造函数,然后通过非静态的Add方法来将循环元素增加到集合中。所以以上限制主要是针对反序列化而设定的。

WCF集合类型中的一些高级规则

WCF框架在序列化时支持集合的集合,也支持数组的数组(交错数组),但不支持多唯数组。

字节数组和 XmlNode 数组是特殊的数组类型,将被视为基元,而不是集合。 序列化字节数组会产生单个包含一个 Base64 编码数据块的 XML 元素,而不是为每个字节都生成一个单独的元素。(笔者认为这是为了性能的考虑才这么处理的。)

如果集合类型实现了IXMLSerializable接口,假设类型为MyType:IList,IXMLSerializable{…},WCF框架将根据在数据契约中声明的类型来进行序列化,如果声明的是集(接口)如IList,那么该类型将被认为是列表集合来序列化,如果声明的是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属性也都将抛出此异常。

以上就是对WCF集合类型的相关介绍。


本文标题:WCF集合类型各种限制于规则介绍
链接地址:http://www.zsjierui.cn/article/djjcjio.html

其他资讯