1. 程式人生 > 其它 >Unity與C#的序列化與反序列化

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;
}