哈喽,你好啊,我是雷工!
前面练习了将数据存储到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部分的代码不用修改,只修改读写类的内容即可。