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).
A 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:
總結一下吧,WCF中應用各個標記時所作的序列化處理:
1. 不給任何標記將會做XML映射,所有公有屬性/字段都會被序列化
2. [Serializable]標記會將所有可讀寫字段序列化
3. [DataContract]和[DataMember]聯合使用來標記被序列化的字段
數據契約(DataContract)
服務契約定義了遠程訪問對象和可供調用的方法,數據契約則是服務端和客戶端之間要傳送的自定義數據類型。
一旦聲明一個類型為DataContract,那么該類型就可以被序列化在服務端和客戶端之間傳送,如下所示。
[DataContract]
public class UserInfo
{
//….
}
---------------------