工作中我們經常會用到序列化和反序列化,主要用於進行文件的讀取和保存,能夠更好的保存我們項目中所進行使用的東西:
在日常生活中我們有許多文件都是通過二進制的方式進行存儲,但是二進制的文件的制作需要首先進行序列化:
關於序列化的目的:
1、以某種存儲形式使自定義對象持久化;
2、將對象從一個地方傳遞到另一個地方。
3、使程序更具維護性。
腳本的字段需要滿足什么條件才能被序列化?(必須同時滿足)
1. public 類型,或者有 [SerializeField]
2. 不是 static
3. 不是 const
4. 不是 readonly
5. 類型必須是 Unity 可以序列化的類型
Unity 可以序列化哪類型?
1. 自定義的,非 abstract 的類,且有 [Serializable]
2. 有 [Serializable] 的結構體
3. UnityEngine.Object 的子類的引用
4. 原生類型(int,float,double,bool,string, etc)
5. 以上類型的數組
6. 以上類型的 List<T>
下面是進行文件的序列化和反序列化的代碼
/// <summary> /// 關於進行文件的序列化 /// </summary> public static byte[] SerializeToByteArray(this object obj) { if (obj == null) { return null; } var bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, obj); return ms.ToArray(); } } /// <summary> /// 進行文件的反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="byteArray"></param> /// <returns></returns> public static T Deserialize<T>(this byte[] byteArray) where T : class { if (byteArray == null) { return null; } using (var memStream = new MemoryStream()) { var binForm = new BinaryFormatter(); memStream.Write(byteArray, 0, byteArray.Length); memStream.Seek(0, SeekOrigin.Begin); var obj = (T)binForm.Deserialize(memStream); return obj; } }
我們可以通過上面的方法,就能夠實現快速的進行序列化的文件的保存,這樣就能夠更加准確的保存數據和讀取數據!!!!!!!