Unity与C#的序列化与反序列化

序列化操作在我们的开发中使用的十分普遍,本文记录了公司最近分享会上关于这部分的讲解,希望能帮助大家对序列化有更系统的了解。

概念
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形式使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。

简单来说就是将对象保存到文件中。如Unity的场景文件和预制体默认就是以二进制的文件保存在工程目录下。

Unity序列化
在Unity中,在检视面板中可以看到的,就是被成功序列化了的参数。与序列化相关的常用的关键字有SerializeField,HideInInspector,NonSerialized,Serializable并可以组合使用。

SerializeField : 表示变量可被序列化。众所周知,公有变量可以在检视面板中看到并编辑,而私有和保护变量不行。SerializeField与private,protected结合使用可以达到让脚本的变量在检视面板里可视化编辑,同时保持它的私有性的目的。
HideInInspector : 将原本显示在检视面板上的序列化值隐藏起来。
NonSerialized :通过此方法可以将一个公有变量不序列化并且不显示在检视面板中。
Serializable:用在类的前面,表示该类可被序列化。
下面用一段代码来举例说明:

public class Test :Monobehavior
{
    public int  a;                               //序列化,显示
    private int b;                               //不序列化,不显示
    [SerializeField ] int c;                     //序列化,显示
    [HideInInspector] public int d;              //序列化,不显示
    [NonSerialized ] public int e;               //不序列化,不显示
    public Test2 test2;                          //序列化,显示(可序列化的部分)
}
 
[Serializable ]
public class Test2
{
     public int aa;
     private int bb;
}
上一篇:数据挖掘算法原理与实践:数据预处理


下一篇:Python中归一化特征到一定数值区间的函数——MinMaxScaler()