工作中我们经常会用到序列化和反序列化,主要用于进行文件的读取和保存,能够更好的保存我们项目中所进行使用的东西:
在日常生活中我们有许多文件都是通过二进制的方式进行存储,但是二进制的文件的制作需要首先进行序列化:
关于序列化的目的:
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; } }
我们可以通过上面的方法,就能够实现快速的进行序列化的文件的保存,这样就能够更加准确的保存数据和读取数据!!!!!!!