WCF基础之数据协定
数据协定最重要的当然就是DataContract和DataMember。这两个特性能应用到类、结构和枚举。这个两个特性跟服务契约的特点是一样的,只有被DataContract标记的类和类中被标记DataMember的属性、字段和事件才能被wcf的序列化引擎进行序列化和反序列化。
[DataContract]
public class UserInfoModel
{
private int age;
[DataMember]
public int Age
{
get { return age; }
set { age = value; }
}
private string name;
[DataMember]
public string Name
{
get { return name; }
set { name = value; }
}
[DataMember]
private Gender gender;
public Gender Gender
{
get { return gender; }
set { gender = value; }
}
}
[DataContract]
public enum Gender
{
[EnumMember]
Men = ,
[EnumMember]
women =
}
这是我的一个简单的数据契约,在定义枚举的时候要用EnumMember,不然你会看到你的枚举会变成string类型。泛型类的处理方式与非泛型类的相同。
数据协定的命名空间NameSpace采用统一资源标识符(URI)的形式进行设置,数据协定的默认值与类名相同,可以通过Name属性重写,数据成员的Name属性的用法和数据协定的Name相同。
等效性:要使数据协定等效则命名空间和名称必须相同且数据成员的名称也必须相同,不然会引发异常。
数据成员的Order属性也会影响数据协定的等效性,数据成员的排序规则:基类成员->没有order属性的成员->order(如果order值相同则以成员的字母排序)。
DataMember的IsRequired标识该数据成员是否为必须,值为Bool型。
服务端:
[DataContract(Namespace = "www.wa3ha.com", Name = "People")]
public class UserInfoModel
{
private int age;
[DataMember(Order=)]
public int Age
{
get { return age; }
set { age = value; }
}
private string name;
[DataMember(IsRequired=true)]
public string Name
{
get { return name; }
set { name = value; }
}
private Gender gender;
[DataMember]
public Gender Gender
{
get { return gender; }
set { gender = value; }
}
private string nativePlace;
[DataMember(Order=)]
public string NativePlace
{
get { return nativePlace; }
set { nativePlace = value; }
}
}
[DataContract]
public enum Gender
{
[EnumMember]
Men = ,
[EnumMember]
women =
}
客户端:
Svcutil.exe生成的代理:

还有一个比较重要的是KnownType,这个推荐看http://www.cnblogs.com/danielWise/archive/2011/06/23/2088464.html园子里的这位的博客!
数据协定版本重大变更:更改协定的Name或者NameSpace;更改DataMember的Order;将DataMember的IsRequired从false变更为true或删除IsRequired为true的成员;重命名数据成员;更改数据成员的数据协定。这些细想一下还是能理解为什么的,就不多说了。
将具有额外字段的类型反序列化为具有缺失字段的类型时,将忽略该字段,反之,额外字段将保留其默认值,0或者null。
WCF基础之数据协定的更多相关文章
- WCF基础之消息协定
通常定义消息的架构,使用数据协定就够了,但是有时必须将类型精确映射到soap消息,方法两种:1.插入自定义soap标头:2.另一种是定义消息的头和正文的安全属性.消息协定通过MessageContra ...
- WCF初探-16:WCF数据协定之基础知识
数据协定概念 “数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每一个做数 ...
- WCF学习心得------(六)数据协定
--前言 最近各种事忙的把之前的WCF学习给耽误了一些,今天抽时间把之前的学习内容给总结了一下,因为知识点比较细碎没有做太多的练习示例,只是对其中关键的知识点做了总结,希望可以对大家有所帮助. 第六章 ...
- WCF初探-17:WCF数据协定之等效性
数据协定等效性特点概述 对于客户端要将某种类型的数据成功发送到服务,或者服务要将数据成功发送到客户端的情况,接收端上并不一定必须存在此发送数据类型. 唯一的要求是两种类型的数据协定应该等效. 要使数据 ...
- WCF初探-18:WCF数据协定之KnownType
KnownTypeAttribute 类概述 在数据到达接收终结点时,WCF 运行库尝试将数据反序列化为公共语言运行库 (CLR) 类型的实例.通过首先检查传入消息选择为反序列化而实例化的类型,以确定 ...
- 传说中的WCF(5):数据协定(a)
在第4篇中,咱们了解了发送/接收SOAP头,从本篇开头,我们不妨更深入地去探求一下有关WCF中的消息到底是啥玩意儿.WCF庞大而复杂,而从 MSDN文档中,你会看到许多很专业很抽象的东西,你不禁会问, ...
- 传说中的WCF(6):数据协定(b)
我们继续,上一回我们了解了数据协定的一部分内容,今天我们接着来做实验.好的,实验之前先说一句:实验有风险,写代码须谨慎. 实验开始!现在,我们定义两个带数据协定的类——Student和AddrInfo ...
- 我们一起学习WCF 第五篇数据协定和消息协定
A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...
- WCF基础
初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...
随机推荐
- 使用nvDXT.exe把图片转换成dds图片【转】
从nvidia官网下载工具包DDS Utilities [https://developer.nvidia.com/legacy-texture-tools] 转换图片格式需要的工具是 nvdxt.e ...
- Snapdragon connect to android devices
怎么都连不上,连不上连不上... 用adb devices是列出来的,开发者选项也设置了, 后来查了下 把adb的路径拖到系统环境变量里就可以了.终于连上了,今天不用加班了...
- fabricjs line
let line1 = new fabric.Line([lineleft, lineheight, lineleft, 0], {//终止位置,线长,起始位置,top,这里是从项目中截下来的我用了变 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_结构体
在DUTs文件夹上右击添加结构体,结构体中可以放基本变量类型,也可以嵌套其他结构体 使用的时候,需要声明结构体的实例,然后按照类.属性的格式来读写变量,会有代码的自动提示 你也可以声明数组,类 ...
- shell 重定向输入
#!/bin/bash NC_START="nc 192.168.76.227 9999" LOOP= ;i<$LOOP;i++)) do $NC_START << ...
- redis有序集合的一个应用
一.需求 记录用户uid和上次操作时间;并清除5分钟以前的数据.用redis的一个key实现.本打算用hash,但hash类型在过期5分钟以前的数据时颇为麻烦. 二.代码实现 class LastLo ...
- Dynamics CRM 2015/2016 Web API:Unbound Action 和 Bound Action
上篇文章介绍了Bound/Unbound Function.今天我们来看看Action吧.像我之前说的:Function和Action之前的差别能够简单理解为.Function不改动数据,可是Acti ...
- 工作总结 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable<T> (可空类型)
可空值类型 备注 一种类型认为是可以为 null,如果它可以分配一个值,也可以分配null,这意味着类型具有无论如何没有值. 默认情况下,所有都引用类型,如String,是否可以为 null, ...
- Android网络框架Volley
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- laravel模型建立和数据迁移和数据填充(数据填充没有成功)未完
开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 - ...