序列化和反序列化

Posted qingaoaoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化和反序列化相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

6.序列化算法一般会按步骤做如下事情:

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

7.序列化的好处:

一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),

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

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只能对共有字段进行序列化。

 

以上是关于序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现二叉树的序列化和反序列化

序列化和反序列化的示例代码

Django REST framework序列化

rest_framework

csharp 此代码演示了json序列化和反序列化的4种方法

Django REST framework 基本组件