一步一个脚印学习WCF系列之WCF契约设计—2-复杂类型序列化之可序列化类型SerializableAttribute
阅读目录
一:数据序列化流程图
二: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 Sex 14 { 15 get { return _sex; } 16 set { _sex = value; } 17 } 18 //年龄 19 private int _age; 20 public int Age 21 { 22 get { return _age; } 23 set { _age = value; } 24 } 25 //课程集合 26 private Course[] _courses; 27 public Course[] Courses 28 { 29 get { return _courses; } 30 set { _courses = value; } 31 } 32 }