序列化/反序列化

序列化

序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。

Unity序列化文档______C#序列化文档

规则

  • 是public或者有SerializedField标签
  • 不是static
  • 不是const
  • 不是readonly
  • 简单类型数组
  • 简单类型列表
  • 简单类型
    • 带有Serializable标签的自定义类(非抽象类,非泛型类)
    • 带有Serializable标签的结构体
    • 继承UnityEngine.Object
    • 原生数据类型(int,float,double,bool,string等)
    • 枚举类型
    • 具体的Unity内置类:Vector2, Vector3, Vector4, Rect, Quaternion, Matrix4x4, Color, Color32, LayerMask, AnimationCurve, Gradient, RectOffset, GUIStyle

注意项

由于Unity对不是继承UnityEngin.Object的类采用值拷贝方式进行序列化,因此同一个对象被多个字段引用,那么序列化时每个字段均会保存,并且在反序列化时变成多个具有同样数据的对象。

  • Unity序列化不支持多维数组
  • 对于复杂对象,需要实现ISerializationCallbackReceiver接口避免多次序列化同一个对象
  • Unity不支持序列化Null对象,在序列化前会实例化对象,可能存在递归情况,因此限定7层
  • Unity不支持序列化多态,例如Animal[],那么存储的Dog,Cat之类的均会变成Animal
posted @ 2021-05-09 23:29  smallrainf  阅读(135)  评论(0编辑  收藏  举报