网站首页 > 文章精选 正文
哈喽,你好啊,我是雷工!
前面练习了将数据存储到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部分的代码不用修改,只修改读写类的内容即可。
猜你喜欢
- 2025-05-22 一个基于C#开发的Excel转Json工具
- 2025-05-22 在C++中,如何避免出现Bug?
- 2025-05-22 C#内插字符串:一种让代码更美观的方式
- 2025-05-22 Google Docs 为代码块添加了14种新的编程语言支持
- 2025-05-22 Cobalt Strike 4.8 用户指南-第五节-获取初始访问
- 2025-05-22 C#语言编程案例-颜色码数制转换
- 2025-05-22 ASP.NET Core Web API 中的 JSON 修补程序
- 2025-05-22 全网最全95道MongoDB面试题1万字详细解析
- 2025-05-22 透视CobaltStrike(二)—从CS到免杀框架Veil
- 2025-05-22 从C#语言开发者转Golang开发的入门教程
- 05-22离线在docker镜像方式部署ragflow0.17.2
- 05-22【Docker 新手入门指南】第七章:镜像使用
- 05-22使用Docker制作OpenJDK镜像
- 05-22使用Dockerfile build镜像
- 05-22一文详解Docker轻量级虚拟化,镜像和容器
- 05-22三 docker 镜像命令
- 05-22Docker-使用Dockerfile 定制镜像
- 05-22Linux日常小技巧Docker打包
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)