Unity序列化与反序列化

目录

      • 序列化
      • 反序列化
      • 为什么需要序列化与反序列化

序列化

把对象转换为字节序列的过程。

序列化可以让对象在网络上传输或者保存在本地文件时,保证对象的完整性和可传递性。序列化后的字节流保存了对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建

字段序列化的条件:

  1. 该字段定义为public,或者添加有 [SerializeField] 属性
  2. 该字段不能使用 static / const / readonly 关键字
  3. 字段的数据类型必须能序列化

可序列化的数据类型:

  • 带有[Serializable]属性的自定义非抽象类或自定义结构体
  • 继承自UntiyEngine.Object的对象引用
  • 基本数据类型(int,float,double,bool,string等)+ 枚举类型
  • 能序列化的字段数组、线性表

不能被序列化的:

  • 自定义的字典类型数据
  • 多态类,抽象类
  • 属性方法
    以上这些即使加了[SerializeField]属性也不会被序列化

如果不想public变量被序列化,使用[NonSerializable]

反序列化

指把字节序列恢复为对象的过程。

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

为什么需要序列化与反序列化

  • 当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送,此时就需要序列化将这些数据转换为二进制序列,而在接受数据时,就需要反序列化将接受到的二进制序列恢复出原来的数据(如打包资源就是序列化过程,下载资源就是反序列化)。
  • 通过序列化,我们可以把数据以字节序列的形式永久地保存到本地文件或数据库中(数据的持久化)。同时,我们还可以利用序列化实现远程通信,即在网络上传送对象的字节序列。

参考文章:https://www.cnblogs.com/ASsss/p/10470664.html

你可能感兴趣的:(Unity,unity,c#,序列化)