閱讀目錄
一:資料序列化流程圖
二:SerializableAttribute
一:資料序列化流程圖
在WCF當中是通過序列化器來進行序列化的,大家可以通過這個圖看到,如果我們希望傳遞一個資料的話或者說我們希望來傳遞一個對象,從用戶端到伺服器端或者從伺服器端到用戶端,我們需要進行資料的序列化,對資料進行序列化我們可以通過DataContractAttribute的資料契約這種方式來進行隱式的資料序列化,也可以通過特定的XMLSerializable序列化的方式來進行資料的序列化,還可以通過加SerializableAttribute標記來實現我們自訂的對象的序列化,無論我們使用哪種序列化方式,資料都會通過序列化器把它轉變為XML的檔案,並且和描述XML的XSD檔案進行綁定,或者說通過XSD檔案來對XML資料進行描述,然後把這些資料發送到用戶端,以實現對象的傳遞
二:SerializableAttribute
. 許多CRL類型都可以被序列化
在一般的序列化過程當中,如果我們希望實現對我們自訂對象的序列化,在我們需要進行序列化的對象上面加上Serializable這個標記,我們通過加這個標記來聲明這個對象是可以進行序列化的,當我們加完這個標記以後,在這個對象當中一些標準的CRL類型都可以由.NET進行序列化的操作
. 所有域都被序列化
在這種基本的序列化當中,一旦我們把這個類聲明為可序列的話,對於這個類當中的這些成員如果不作任何標記處理的話,那麼這些成員預設都是要參與到序列化當中的,所有域都可以被序列化,無論訪問性如何
. 無法對命名規範和資料類型進行控制
在我們加上這個標記或者說特性以後,比如:我們進行XML序列化,序列化以後,SOAP資料包的當中具體的成員名稱與我們代碼裡描述的具體的成員名稱來進行了綁定,這種綁定有時候不是我們需要的綁定,但是這種序列化方式卻為我們完成了這種綁定,這種綁定提高SOAP訊息和我們代碼的耦合性,會降低我們代碼的靈活程度
1 [Serializable] 2 public class Student 3 { 4 //姓名 5 private string _name; 6 public string Name 7 { 8 get { return _name; } 9 set { _name = value; }10 }11 //性別12 private string _sex;13 public string Sex14 {15 get { return _sex; }16 set { _sex = value; }17 }18 //年齡19 private int _age;20 public int Age21 {22 get { return _age; }23 set { _age = value; }24 }25 //課程集合26 private Course[] _courses;27 public Course[] Courses28 {29 get { return _courses; }30 set { _courses = value; }31 }32 }