您的位置:首页 > 其它

深入剖析序列化和反序列化

2009-05-30 21:47 141 查看
序列化”可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流。在以后“反序列化”该对象时,创建原始对象的精确复本。
一、为什么要选择序列化
一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本;
另一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。
例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。
二、如何实现对象的序列化及反序列化
要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。
实现一个类可序列化的最简便的方法就是增加Serializable属性标记类。如:

Code
/// <summary>
/// 二进制序列化,将对象保存为文件
/// </summary>
private static void BinarySerialize()
{
Teacher t = new Teacher("R9800","R9800 Advisor");
BinaryFormatter formatter = new BinaryFormatter();
FileStream fileStream = File.Create(@"E:\BinarySerializetText.txt");
formatter.Serialize(fileStream, t);
fileStream.Close();

}
/// <summary>
/// 二进制反序列化,将文件读取为对象
/// </summary>
private static void BinaryDeserialize()
{
BinaryFormatter derializer=new BinaryFormatter();
FileStream fileStream = new FileStream(@"E:\BinarySerializetText.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
Teacher t = (Teacher)derializer.Deserialize(fileStream);
System.Diagnostics.Debug.WriteLine(t.ID+t.Name);
fileStream.Close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: