您的位置:知识库 » .NET技术

WCF分布式开发步步为赢(7):WCF数据契约与序列化

作者: Frank Xu Lei  来源: 博客园  发布时间: 2009-06-01 10:43  阅读: 7736 次  推荐: 0   原文链接   [收藏]  
摘要:WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤。
[1] 数据契约
[2] 序列化基本概念
[3] .NET 序列化机制
[4] 代码实现与分析

  本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤。那么序列化是什么?为什么会有序列化机制?或者说它是为了解决什么问题?作用是什么?现有的.NET 序列化机制和WCF序列化机制有什么不同?我们在本节文章里都会详细介绍。

  下面我们正式进入今天的学习阶段,首先来介绍一下数据契约的概念:

  【0】数据契约(DataContract):

   在WCF服务编程中我们知道,服务契约定义了远程访问对象和可供调用的服务操作方法,数据契约则是定义服务端和客户端之间要传送的自定义数据类型。在WCF项目中,声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送。类只有声明为DataContract,该类型的对象才可以被传送,且只有类的属性会被传送,需要在属性生命前加DataMember声明,这样该属性就可以被序列化传送。默认情况属性是不可传递的。类的方法不会被传送。WCF对定义的数据契约的类型可以进行更加细节的控制,可以把一个成员属性排除在序列化范围以外,客户端程序不会获得被排除在外的成员属性的任何信息,包括定义和数据。  代码如下:

 [DataContract]//数据契约属性声明
    class MyDataContract
    {
        [DataMember(Name 
= "MyName")]//数据成员标记,支持别名定义
        public string Name
        {
            
get;
            
set;
        }
        [DataMember(Name 
= "MyEmail")]//数据成员标记,支持别名定义
        public string Email
        {
            
get;
            
set;
        }
        [DataMember]
//数据成员标记
        public string Mobile
        {
            
get;
            
set;
        }
        
//没有[DataMember]声明,不会被序列化
        public string Address
        {
            
get;
            
set;
        }
    }
}

  上面类声明为DataContract,部分属性声明为DataMember(数据成员)。可以序列化为客户端传送。Address成员属性没有被声明为DataMember,因此在交换数据时,不会传输Address的任何信息。声明为DataMember的成员也可以自定义客户端可见的别名 如:[DataMember(Name = "MyName")]//数据成员标记,支持别名定义。

0
0
标签:WCF

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻