前面
对象的保存(持久化)和读取一文是通过
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;
}
函数.
/// <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;
}
本文介绍了一种使用BinaryFormatter进行对象序列化的方法,该方法可以序列化对象的所有成员,无论其是否为公有成员。文章提供了将对象序列化为Binary文件的通用函数及从Binary文件反序列化对象的实现。

528

被折叠的 条评论
为什么被折叠?



