[原创]谈谈WCF中的Data Contract (1):Data Contract Overview
[2] [原创]谈谈WCF中的Data Contract (1):Data Contract Overview
[3] [原创]谈谈WCF中的Data Contract (1):Data Contract Overview
Data Contract Mapping Mechanism
通过上面的介绍,我们发现WCF Data Contract就如同一个适配器,弥合了 CLR Type和Neutral Contract的差异,很容易地实现了他们之间的匹配。接下来,我们就以一个实际的例子来介绍WCF DataContract的这种适配功能:通过DataContractAttribute的修饰,实现了将一个现有Data Type向一个既定的Neutral Data Contract进行适配,从而实现了对基于该Neutral Data Contract的Service 进行正常调用的目的。
我们就以上面提到的Order Class为例,Service端的Order class最终暴露成一个以XSD表示的Neutral Contract:
Order class:



















XSD:














设我们在Client有一个与之结构相似的CustomOrder class:












仔细分析CustomOrder和Service的Order以及XSD,我们发现两者除了结构一样之外,没有一处使相同的,具体体现在:
-
Class Name不一样。
-
NameSpace不一样,Order和XSD的namespace为http://artech.datacontractversioning,而CustomOrder却没有显示指定一个Namespace(这样WCF会为其指定一个默认的namespace)。
-
成员的名称不一样。
-
成员的顺利不一样。
如果我们现在要使我们的CustomOrder满足现有的Order Data Contract,我们就需要消除这些不同之处,通过DataContractAttribute和DataMemberAttribute,这样的问题根本就不是问题,下面就是我们重新定义的CustomOrder class。




















通过在DataContractAttribute指定Name和Namespace使Data Contract和Namespace和既定的Contract相匹配,通过DataMemberAttribute的Name和Order参数是成员的名称和次序与既定的Contract相匹配。