序列化和反序列化可以方便地实现对象(Object)和字节数组(byte[])的转换,其中序列化将Object转换为byte[],反序列化将byte[]转换为Object。
其中值得注意的有以下几个方面:
1. 将序列化的对象进行反序列化时,其中间的byte[]一定确保没有变化。否则将出现序列化(反序列化)异常。
2. 序列化和反序列化的对象需声明[Serializable](可序列化的),切其包含的全部内容(字段)需可序列化。否则将发生序列化异常。(无法加载序列化所需的类型)
3. 在将已序列化的对象反序列化时,不要求其byte[]的长度一致,反序列化时会自动省略其所需内容后的额外数据。
using System;
using System.Collections.Generic;
using System.Text;
namespace talefox.ShareLib
{
public class Serialable
{
/// <summary>
/// 序列化
/// </summary>
/// <param name="data">要序列化的对象</param>
/// <returns>数据缓冲区</returns>
public static byte[] Serialize(object obj)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream stream = new System.IO.MemoryStream();
formatter.Serialize(stream, obj);
byte[] data = stream.GetBuffer();
return data;
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="data">数据缓冲区</param>
/// <returns>对象</returns>
public static object Deserialize(byte[] data)
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.MemoryStream stream = new System.IO.MemoryStream(data);
data = null;
Object obj = formatter.Deserialize(stream);
return obj;
}
}
}