C#知识|对象序列化与反序列化(对象序列化和反序列化)

C#知识|对象序列化与反序列化(对象序列化和反序列化)

编码文章call10242025-02-01 3:27:5012A+A-

哈喽,你好啊,我是雷工!

前面练习了将数据存储到TXT文件,今天接着学习对象系列化与XML文件基础的应用,

以下为学习笔记。

01 对象的序列化

序列化是在开发中非常常见的,无论是WinForm开发,还是Web开发都会用得到序列化。

1.1、文本保存对象的缺点

txt文件可以用记事本直接打开查看,信息透明,数据安全性差。

1.2、对象状态保存新方法

可以使用序列化和反序列化来保存和还原对象。

1.3、序列化与反序列化应用场合

①:应用系统配置信息(如果信息量较大,则使用该方法更方便读取和写入)。

②:当程序不用数据库时,可以作为数据存取的载体。

③:WebServer中对象的传递。

④:模块之间数据的传递。

1.4、序列化与反序列化对象的好处

①:对象保存和读取方便,扩展性强。

②:数据安全高效;

02 效果演示

2.1、保存对象

通过序列化将界面内容保存到objAccount.acc中

2.2、保存对象的样式

序列化保存的文件用记事本打开是如下样式,无法识别存储的内容,安全性较好;

2.3、读取对象

通过反序列化,将objAccount.acc中的内容读取到文本框;

03 对象序列化步骤

3.1、对象标识为可序列化

在Account类中添加对象可序列化标识 [Serializable]

3.2、引入两个命名空间

在FrmFile.cs中引入两个命名空间:

//引入命名空间
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

3.3、使用二进制格式化器

处理步骤:

①:封装对象信息;

②:创建文件流;

③:创建二进制格式化器;

④:调用序列化方法;

⑤:关闭文件流;

处理脚本为:

//序列化保存对象
private void btnSaveObj_Click(object sender, EventArgs e)
{
 //封装数据
 Account objAccount = new Account()
 {
Name = this.txtName.Text.Trim(),
Owner = this.txtOwner.Text.Trim(),
Duration = Convert.ToInt32(this.txtDuration.Text.Trim()),
DataRed = Convert.ToDateTime(this.txtDataRed.Text.Trim())
 };
 //创建文件流
 FileStream fs = new FileStream("objAccount.acc", FileMode.Create);
 //创建二进制格式化器
 BinaryFormatter formatter = new BinaryFormatter();
 //调用序列化方法
 formatter.Serialize(fs, objAccount);
 //关闭文件流
 fs.Close();
}

04 反序列化读取对象步骤

处理步骤:

①:创建文件流;

②:创建二进制格式化器;

③:调用反序列化方法;

④:关闭文件流;

⑤:显示数据;

读取代码为:

//反序列化读取对象
private void btnReadObj_Click(object sender, EventArgs e)
{
 //创建文件流
 FileStream fs = new FileStream("objAccount.acc", FileMode.Open);
 //创建二进制格式化器
 BinaryFormatter formatter = new BinaryFormatter();
 //调用反序列方法
 Account account = (Account)formatter.Deserialize(fs);
 //关闭文件流
 fs.Close();
 //显示数据
 this.txtName.Text = account.Name;
 this.txtOwner.Text = account.Owner;
 this.txtDuration.Text = account.Duration.ToString();
 this.txtDataRed.Text = account.DataRed.ToShortDateString();
}

注意:反序列化方法参数只有一个;并且返回值是object类型;需要强制转换成具体类型。

05 后记

本节学习了序列化和反序列化的方法,其中读写的方式可以独立到一个单独的类,这样如果想要将存储位置改为数据库的话,UI部分的代码不用修改,只修改读写类的内容即可。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4