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