工作中我們經常會用到序列化和反序列化,主要用於進行文件的讀取和保存,能夠更好的保存我們項目中所進行使用的東西:
在日常生活中我們有許多文件都是通過二進制的方式進行存儲,但是二進制的文件的制作需要首先進行序列化:
關於序列化的目的:
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;
}
}
我們可以通過上面的方法,就能夠實現快速的進行序列化的文件的保存,這樣就能夠更加准確的保存數據和讀取數據!!!!!!!
