序列化又稱序列化,是.net執行時環境用來支援使用者定義型別的流化的機制。其目的是以某種儲存形式使自定義物件持久化,或者將這種物件從乙個地方傳輸到另乙個地方。
簡單來說就是將物件儲存到檔案中。如unity的場景檔案和預製體預設就是以二進位制的檔案儲存在工程目錄下。
在unity中,在檢視面板中可以看到的,就是被成功序列化了的引數。與序列化相關的常用的關鍵字有serializefield,hideininspector,nonserialized,serializable並可以組合使用。
下面用一段**來舉例說明:
我們新建乙個test指令碼來驗證一下,輸入上述**後觀察檢視面板:
然後將掛在指令碼的預製體用sublime開啟觀察序列化部分:
耶,成功了!
注意:並非所有的公有變數都是可以被序列化的。其中const,static是靜態的,屬於類而非物件,無法序列化。鍊錶和字典在記憶體中的儲存是不連續的,也無法序列化。其中const,static,readonly的區別可參考文章:
簡單介紹兩種常用的c#序列化操作(二進位制方法和xml方法)
首先我們先定義乙個可被序列化的類democlass
它包含兩個公有變數id和name,乙個含參的建構函式和乙個預設建構函式(二進位制不需要,xml必須), 乙個用於顯示的輸出函式。序列化:新建或開啟乙個二進位制檔案,通過二進位制格式器將物件demo寫入該檔案中。
反序列化:開啟待反序列化的二進位制檔案,通過二進位制格式器將檔案解析成物件demo,並輸出到控制台。
耶,成功了!
注意:二進位制方法可以序列化私有變數,不能序列化被[nonserialized ]修飾的變數且類需要被[serializable ]標識。
序列化與反序列化與二進位制方法十分類似。
耶,成功了!
注意:xml方法中類不需要[serializable]標識,不能序列化私有變數,[nonserialized]這個標識在該方法中無效。
區別:希望大家在日常開發中合理使用serializefield,不用濫用public。
本文**
序列化一些要點筆記
1.乙個類可序列化的前提 實現serializable介面 2.乙個屬性不想序列化的方式 增加transient關鍵字 3.serialversionuid 是表示乙個類的序列化標識,和乙個類的類名以及包路徑一起組成類在序列化時的唯一標識。4.當兩個jvm中存在serialversionuid 類名...
Unity 序列化和反序列化
1 序列化就是將物件儲存在檔案中,在檢視面板看到的就是成功序列化的內容 與序列化相關的常用的關鍵字有serializefield,hideininspector,nonserialized,serializable並可以組合使用。serializefield 表示變數可被序列化。眾所周知,公有變數可...
Unity 的序列化
經過 serialize 序列化 的 class 或 attribute 的值會被儲存成二進位制檔案,在 unity 中可序列化的 attribute 將在 inspector 顯示出來 class 與 public attribute 都是被視為可序列化的 private attribute 被視...