版权所有,转载请注明出处:http://guangboo.org/2013/05/28/wcf-datacontract-equivalence
WCF的客户端和服务端之所以能顺利的传输某一类型的数据,其实不在于接收方的接收类型和发送方的发送类型一致,而实际是两个类型所代表的DataContract是等价的。
所谓等价性是说DataContract的命名空间和名称,及其数据字段的名称,类别也是一致的。
通常DataContract的等价性是通过DataContractAttriubte和DataMemberAttribute的Name属性来定义的,默认情况下Name属性的值就是类(结构体)的名字和属性的名字。因此如下定义效果是一样的:
[DataContract]
class Contact { ... }
[DataContract(Name = "Contact")]
class Contact { ... }
同样的,如下字段的定义效果也是一样的:
[DataMember]
public string Name;
[DataMember(Name = "Name")]
public string Name;
因此,通过DataContractAttribute和DataMemberAttribute的Name字段可以实现不同的数据类型可以表示等价的DataContract,如:
[DataContract]
class Contact
{
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
}
[DataContract(Name = "Contact")]
class Person
{
[DataMember(Name = "FirstName")]
public string Name;
[DataMember(Name = "LastName")]
public string Surname;
}
但是DataMemberAttribute还有一个属性是Order,如下定义的两个类则不是等价的。
[DataContract]
class Contact
{
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
}
[DataContract(Name = "Contact")]
class Person
{
[DataMember(Name = "FirstName", Order = 2)]
public string Name;
[DataMember(Name = "LastName", Order = 1)]
public string Surname;
}
Order属性决定了DataContract序列化和反序列化的顺序,默认情况下,序列化和反序列化都是自上往下的,如果有继承关系,也是按先基类后子类的顺序。但是有一点需要注意就是,如果使用DataMember的Name属性重新命名DataContract的字段时,可能会打乱默认的序列化顺序。如下定义也不是等价的:
[DataContract]
class Contact
{
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
[DataMember]
public int Age;
}
[DataContract(Name = "Contact")]
class Person
{
[DataMember(Name = "FirstName")]
public string Name;
[DataMember(Name = "LastName")]
public string Surname;
[DataMember]
public int Age;
}
Person类的序列化顺序其实是Age, FirstName, LastName,因此需要显示的添加Order属性,如果类中的Order属性是相等的,那么就会按照自顶向下的顺序序列化和反序列化。
分享到:
相关推荐
WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--WCF简单实例--
WCF入门指导 引你进入WCF的大门 WCF、WCF
WCF学习笔记 WCF学习笔记 WCF学习笔记 WCF学习笔记 WCF学习笔记 WCF学习笔记
(英文版)WCF 4.0 Multi-tier Services Development with LINQ to Entities Packt Publishing 出版2010, PDF格式
WCF学习笔记 WCF学习笔记 WCF学习笔记
WCF学习笔记, 一步一步教你学习WCF
WCF代码1-简单的WCF程序WCF代码1-简单的WCF程序
(2):WCF契约设计-WCF课件-《构建WCF面向服务的应用程序》
WCF 4.0 Multi-tier Services Development.with LINQ to Entities
WCF 4.5 Multi-Layer Services WCF C# .net webservice soap
WCF 4.5 Multi-Layer Services Development with Entity Framework(3rd) 英文无水印pdf 第3版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...
学习.net wcf 入门版 pdf english
WCF 实例源代码------聊天室 WCF 实例源代码------聊天室
实践WCF中的MessageContract与IXmlSerializable
WCF 学习笔记 WCF 杂项 WCF Security WCF Transaction WCF MSMQ __
教你轻松掌握WCF基础知识,详细描述WCF基本原理及实例讲解
这是一个Ext框架,我对此框架很感兴趣。。。特别想了解一下。。。
WCF学习的相关资料,这些都是我从网上收集整理的,想学习的人有福啦
WCF部署在IIS上,使用net.tcp比较简单详细的配置
WCF学习笔记,自己整理,xps格式。内容详实,清晰,带有代码,方便调试。