序列化反序列化的简单例子
2011-03-03 15:07
232 查看
基本序列化
要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记,如下所示:
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
以下代码片段说明了如何将此类的一个实例序列化为一个文件:
MyObject
obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "一些字符串";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
本例使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化,但这一点在本例中未明确体现出来。在这一点上,二进制序列化不同于只序列化公共字段的 XML 序列化程序。
将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。以下代码片段说明了如何进行此操作。
IFormatter
formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(fromStream);
stream.Close();
// 下面是证明
Console.WriteLine("n1: {0}", obj.n1);
Console.WriteLine("n2: {0}", obj.n2);
Console.WriteLine("str: {0}", obj.str);
要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记,如下所示:
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
以下代码片段说明了如何将此类的一个实例序列化为一个文件:
MyObject
obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "一些字符串";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
本例使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化,但这一点在本例中未明确体现出来。在这一点上,二进制序列化不同于只序列化公共字段的 XML 序列化程序。
将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。以下代码片段说明了如何进行此操作。
IFormatter
formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(fromStream);
stream.Close();
// 下面是证明
Console.WriteLine("n1: {0}", obj.n1);
Console.WriteLine("n2: {0}", obj.n2);
Console.WriteLine("str: {0}", obj.str);
相关文章推荐
- 简单的WindowsForm Client与WebService通信例子[对象的序列化与反序列化]
- C# ArrayList用BinaryFormatter序列化和反序列化进行文件读写的一个简单例子
- C# 类用XmlSerializer进行序列化和反序列化进行文件读写的一个简单例子
- Avro - 简单介绍,Java版 - 序列化与反序列化官方例子
- 序列化反序列化的简单例子
- 对象,对象集合的简单Xml序列化与反序列化
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- 对象序列化反序列化例子
- Java序列化简单例子
- java 序列化 反序列化 简单实现
- 用java实现一个简单的序列化的例子
- java simpleXml序列化反序列化小例子
- java 的序列化和反序列化的概念及简单使用
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
- 简单的xml序列化和反序列化
- 序列化和反序列化的简单理解
- google protocl buffer 序列化和反序列化的一个例子
- 对象,对象集合的简单Xml序列化与反序列化 【实用代码,含泛型方法】
- JsonTools(java Json序列化/反序列化)简单使用