数据协定最重要的当然就是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。

最新文章

  1. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
  2. Lua简介
  3. java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值
  4. windows 下my.ini的配置优化
  5. Matrix-Tree定理
  6. 剑指offer系列59---寻找丑数
  7. Inlinehook PspCreateProcess
  8. Z-BLOG模板结构图
  9. [html]关于html标签的一些总结
  10. Ubuntu 16.04 安装GIMP绘图软件
  11. .Net业务搭配实用技术栈(转)
  12. [转]用C#在windows上操控电脑自带蓝牙(入道指南)
  13. Linux常用基本命令[cp]
  14. 20145106 java实验二
  15. ELNEC Programmer
  16. Centos7 下编译 Openjdk8
  17. android 签名相关
  18. IEEEXtreme 10.0 - Checkers Challenge
  19. AIOps实践三板斧:从可视化、自动化到智能化
  20. 腾讯云,搭建 FTP 文件服务

热门文章

  1. mybatis 3简介
  2. Windows 10 Enterprise LTSB版本
  3. iOS_block代码块
  4. Elasticsearch Java API深入详解
  5. 模拟select控件&&显示单击的坐标&&用户按下键盘,显示keyCode
  6. Laravel之加密解密/日志/异常处理及自定义错误
  7. windows快捷键之打开网络连接
  8. jQuery的$.fn使用
  9. hector_localization hector_salm rplidar同时编译
  10. instagram架构分析_转