序列化和反序列化

1.序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程算法

2.对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。网络

3.序列化机制的核心做用就是对象状态的保存与重建。函数

4.反序列化就是客户端从文件中或网络上得到序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,经过反序列化重建对象。spa

5.序列化就是把实体对象状态按照必定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。.net

6.序列化算法通常会按步骤作以下事情:code

(1)将对象实例相关的类元数据输出。
(2)递归地输出类的超类描述直到再也不有超类。
(3)类元数据完了之后,开始从最顶层的超类开始输出对象实例的实际数据值。
(4)从上至下递归输出实例的数据orm

7.序列化的好处:对象

一是实现了数据的持久化,经过序列化能够把数据永久地保存到硬盘上(一般存放在文件里),blog

二是,利用序列化实现远程通讯,即在网络上传送对象的字节序列。递归

8.反序列化的过程(从文件-->对象的过程),不是new出来新对象,而后对其进行赋值的。

9.在反序列化的时候,既不会为成员初赋值,也不会执行构造函数,而是直接对没有标注为[NonSerialized]的字段赋给其保存在文件中的值,而对于标注为[NonSerialized]的字段,其结果仅仅是default(FiledType),此处的FieldType是指字段的类型(注:能够利用OnSerialized方法来过后修改字段的值)。

10..net framework的类库中提供了三个能够用于序列化和反序列化的类,分别为BinaryFormatter、SoapFormatter和XmlSerializer。

11.BinaryFormatter能够对单个对象,或集合对象(如List<T>、ObservableCollection<T>)进行序列化。

须要指出的是,须要对被序列化的对象添加[Serializable]特性。如:

[Serializable] public class Person { public string name; public int age; }

12.XmlSerializer,不管对于单个对象仍是集合对象(如List<T>、ObservableCollection<T>),均可以使用XmlSerializer进行序列化。须要指出的是,不须要对被序列化的对象添加[Serializable]特性注解。可是,使用XmlSeriabizable的时候,被序列化的对象应该具备无参数构造函数。

13.BinaryFormatter可以对全部字段(私有、保护、公有)进行序列化和反序列化,而XmlSerializer只能对共有字段进行序列化。

相关文章
相关标签/搜索