6、等效数据契约。

   当数据契约在客户端和服务端不一致的时候,比如,服务端数据契约的添加或者删除数据成员的时候,如何处理呢。

1)、数据契约的等效性:

  等效的数据契约,就是指两个数据契约在进行序列化之后,生成的XML文件一样的时候就是等效的数据契约,这个可以通过DataContract和DataMemeber的Name属性指定相同的数据契约,如:

  [DataContract]

  public class Customer

  {

    [DataMember]

    public string FirstName{get;set;}

  }

  [DataContract(Name ="Customer")]

  public class Contact

  {

    [DataMemeber(Name ="FirstName")]

    public class Surname{get;set;}

  }

  上面两个数据契约就是等效的,在客户端调用会等到一样的数据契约。

2)、数据成员的添加:

  当服务端对数据契约中添加了一个数据成员的时候,这时候,在客户端,调用并不会报出异常,只不过,在客户端对于的数据契约的这个成员,返回的值为Null,在DataMember特性里,有一个IsRequired属性,默认情况下这个属性是false,表示这个数据成员在序列化的时候可以缺少,但是如果设置了IsRequired为true的时候,客户端和服务端数据契约必须包含这个数据成员,否则会报错。

  public class Contact

  {

    [DataMemeber(Name ="FirstName" IsRequired = true)]//说明序列化的时候,客户端和服务端必须包含该属性

    public class Surname{get;set;}

  }

3)、数据成员的删除:

  这里说的是服务端的数据契约删除一个成员的时候,也是说服务端的数据契约比客户端少一个数据成员,应该如何处理呢

  默认情况下,当服务端缺少数据成员的时候,在客户端,进行反序列化得到对应的数据契约对象的时候,并不会抛出异常,只不过,客户端得到的数据契约对象对应的缺少的数据成员值是null。

7、序列化在WCF框架中的实现。

1)、消息格式化器:

  消息格式化器是对消息的序列化和反序列化的组件,在服务端和客户端名称不同,在服务端被称为分发消息格式化器,在客户端叫客户端消息格式化器。

  WCF中,定义了两个特性,DataContractFormateAttribute和XmlSerializeFormateAttribute,在相应的契约或类上应用那个特性,WCF就按照那种序列化方式进行序列化和反反序列化,如果一个类生同时应用了这两个特性,则按照XmlSerializerFormate方式序列化,如果都不加,默认是采用DataContractFormate方式进行序列化和反序列化的。

posted on 2013-07-31 21:06  Kelly_HanShuai  阅读(113)  评论(0)    收藏  举报