WCF框架作为一个高效的.NET程序框架。其混合了函数语言和物件导向程序编制语言,并且***的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。
WCF框架自定义集合类型,如果作为服务契约的一部分进行发布,必须要保证以下几点:WCF框架包含的类型必须使用[Serializable]和[DataContract]标记;WCF集合包含的类型属性必须使用[DataMember]标记,并且,如果是属性(Property),必须要实现get和set;WCF集合类型必须使用[Serializable]和[CollectionDataContract]标记,以及[KnownType]标记指向集合包含的子类型;集合类型必须实现IEnumerable<T>接口;集合类型使用[DataMember]标记的IList将集合项向客户端公开。
缺省情况下,WCF框架对集合类型是内建支持的,也就说你不需要应用任何属性,就可以将集合应用在数据契约(协定)中,但前提是集合中的元素必须是应用了DataContractAttribute属性或者是可序列化的类型。这时,数据契约(协定)名称和命名空间就依赖集合中包含的元素的类型的名称和命名空间了,它们不受集合类型本身的名称和命名空间的影响。#t#
如果集合是应用于某个数据契约类型中时,那么它的名称将是字段名称,如下面Customer的定义以及序列化后的表示:
- [DataContract]
- public class Customer
- {
- [DataMember]
- public List<string> addresses = new List<string> {"Beijing","ShangHai" };
- [DataMember]
- public Dictionary<int, object> telephones = new Dictionary<int, object> {
- { 1, "010-82371234" },
- { 2, "021-56781234" } };
- }
- <Customer xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://schemas.datacontract.org/2004/07/WCFTestSerializer">
- <addresses xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
- <d2p1:string>Beijing</d2p1:string>
- <d2p1:string>ShangHai</d2p1:string>
- </addresses>
- <telephones
- xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
- <d2p1:KeyValueOfintanyType>
- <d2p1:Key>1</d2p1:Key>
- <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">010-82371234</d2p1:Value>
- </d2p1:KeyValueOfintanyType>
- <d2p1:KeyValueOfintanyType>
- <d2p1:Key>2</d2p1:Key>
- <d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">021-56781234</d2p1:Value>
- </d2p1:KeyValueOfintanyType>
- </telephones>
- </Customer>