前面
对象的保存(持久化)和读取一文是通过
XmlSerializer来持久化对象,缺点是不能序列化非公有成员,这里换另外一种方法,通过BinaryFormatter方法,这种方法,对象的所有成员都会被序列化,无论是否是公有的
.如下通用
函数.
函数.
/// <summary>
/// 将一个object对象序列化为Binary文件
/// </summary>
/// <param name="obj">能序列化的对象</param>
/// <param name="file">路径+文件名</param>
public static void SaveBinaryObject( object obj, string file)
{
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.ReadWrite))
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.WriteTo(fs);
}
fs.Close();
}
}
/// <summary>
/// 反序列化Binary文件到object
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="file">路径+文件名</param>
public static T GetBinaryObject < T > ( string file)
{
T ret;
using (FileStream fs = File.Open(file, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
using (MemoryStream ms = new MemoryStream(buffer))
{
IFormatter formatter = new BinaryFormatter();
ret=(T)formatter.Deserialize(ms);
}
fs.Close();
}
return ret;
}
/// 将一个object对象序列化为Binary文件
/// </summary>
/// <param name="obj">能序列化的对象</param>
/// <param name="file">路径+文件名</param>
public static void SaveBinaryObject( object obj, string file)
{
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.ReadWrite))
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.WriteTo(fs);
}
fs.Close();
}
}
/// <summary>
/// 反序列化Binary文件到object
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="file">路径+文件名</param>
public static T GetBinaryObject < T > ( string file)
{
T ret;
using (FileStream fs = File.Open(file, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
using (MemoryStream ms = new MemoryStream(buffer))
{
IFormatter formatter = new BinaryFormatter();
ret=(T)formatter.Deserialize(ms);
}
fs.Close();
}
return ret;
}