序列化:在 .NET 中,可以通过使用序列化器(Serializer)来实现对象的序列化。序列化器可以将对象转换为字节流,以便在网络上传输、存储到文件中或在应用程序之间传递。
反序列化:在 .NET 中,可以使用 System.Runtime.Serialization.Formatters.Binary 命名空间中的 BinaryFormatter 类,将一个对象序列化成 .dat 文件,也可以将 .dat 文件反序列化为对象。
反序列化的过程如下:
1.创建一个 FileStream 对象,将 .dat 文件作为输入流。
2.创建一个 BinaryFormatter 对象。
3.使用 BinaryFormatter 的 Deserialize 方法,从 FileStream 中将对象反序列化出来。
4.关闭 FileStream 对象。
using System;
using System.Runtime.Serialization.Formatters.Binary;
namespace Serializable {
[Serializable]
public class Staff
{
int No { get; set; }
string Name { get; set; }
bool Sex { get; set; }
//未序列化
[NonSerialized]
string Job;
public Staff()
{
}
public Staff(int no, string name, bool sex, string job)
{
No = no;
Name = name;
Sex = sex;
Job = job;
}
public override string ToString()
{
return "工号:" + No + "\t姓名:" + Name + "\t性别:" + (Sex ? "男":"女") + "\t工作:" + Job;
}
}
public class Program
{
static void Main(string[] arge)
{
//-----------序列化 对象-》data.dat文件-------------
// 创建一个对象并设置其属性
Staff staff = new Staff(1,"xiao_ming",true,"开发/测试");
// 创建一个二进制序列化器
BinaryFormatter formatter = new BinaryFormatter();
// 打开一个文件流,将对象序列化到文件中
using (FileStream stream = new FileStream("data.dat", FileMode.Create))
{
formatter.Serialize(stream, staff);
/*这是一个将一个 List 对象序列化并写入到指定流中的操作,使用的是 BinaryFormatter 类。BinaryFormatter 类是 .NET Framework 中的一个类,它可将对象序列化为二进制流,也可以将二进制流反序列化为对象。这个操作可以将一个对象持久化到磁盘或者网络中,以便稍后再次使用。需要注意的是,List 中所有的对象必须是可序列化的。
* List<Staff> list = new List<Staff>();
* list.Add(new Staff(1,"xiao_ming",true,"开发/测试"));
* formatter.Serialize(stream, list);
*/
}
Console.WriteLine("Object serialized to file.");
//-----------反序列化 data.dat文件-》对象-------------
Staff myStaff = new Staff();
FileStream fileStream = new FileStream("data.dat", FileMode.Open);
myStaff = (Staff)formatter.Deserialize(fileStream);//myStaff = {工号:1 姓名:xiao_ming 性别:男 工作:}
fileStream.Close();
}
}
}
输出的data.dat文件