C# DataContract DataMember

Posted on 2013-12-30 22:40  chayu3  阅读(3549)  评论(0编辑  收藏  举报

Windows Communication Foundation (WCF) uses a serialization engine called the Data Contract Serializer by default to serialize and deserialize data (convert it to and from XML).

data contract is a formal agreement between a service and a client that abstractly describes the data to be exchanged. 

 

Serializable标记大家都很熟悉,它是XmlSerializer的标记,在WCF中其实很少用这个标记,因为我们WCF用的是DataContractSerializer,对应的标记也是DataContract

Primitive类型默认是直接可被序列化的,自定义的类型要用DataContract序列化处理,WCF用DataContactSerializer。在WCF中一旦一个类被标记为DataContract,那么只有标记为DataMember的字段/属性才会被序列化。

All .NET Framework primitive types, such as integers and strings, as well as certain types treated as primitives, such as DateTime and XmlElement, can be serialized with no other preparation and are considered as having default data contracts. 

 

DataContract也可以有继承,但是child和parent都要有[DataContract]attribute:

[DataContract]
public class ConsoleData{
  [DataMember]
  public String Description{ get;set;}
}
[DataContract]
public class SomeData:ConsoleData{
  [DataMember]
  public int Volume{ get;set;}
}
但是在使用方面,这样还不足够,在用parent class作为参数的方法上,它无法识别child class object,所以要在parent DataContract上register child class:
[DataContract]
[KnownType(typeof(SomeData)]
public class ConsoleData{
[DataMember]
public String Description{ get;set;}
}