C#序列化(二)二进制序列化的案例 c#经典案例.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在C#编程中,序列化是一个重要的概念,它允许我们将对象的状态转换为可存储或可传输的数据格式。本文主要探讨的是二进制序列化,这是一种常见的序列化方式,尤其适用于需要高效、紧凑地保存和恢复数据的情况。我们将通过一个WinForm程序的案例来深入理解这一过程。 案例中,我们有一个简单的日记应用,它使用Dictionary<string, string>来存储标题(key)和内容(value)。当用户点击“保存”按钮时,程序会将当前的标题和内容添加到字典中,并利用二进制序列化将其保存为文本文件。文件名为标题,扩展名为.txt,存储在应用程序的“Notes”子目录下。以下是实现这一功能的关键代码片段: 1. 创建一个Dictionary<string, string>实例,用于存储日记条目: ```csharp Dictionary<string, string> dic = new Dictionary<string, string>(); ``` 2. 在“保存”按钮的点击事件中,获取用户输入的标题和内容,然后将它们作为键值对添加到字典中。接下来,确定保存文件的完整路径,并使用FileStream创建一个新的文件: ```csharp var sTitle = txtTitle.Text.Trim(); var sContent = txtContent.Text.Trim(); dic.Add(sTitle, sContent); string fullPath = Path.Combine("Notes", sTitle + ".txt"); using (FileStream fsWrite = new FileStream(fullPath, FileMode.Create, FileAccess.Write)) { // 二进制序列化 BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fsWrite, dic); MessageBox.Show("添加日记成功"); } ``` 这里,BinaryFormatter被用来进行二进制序列化,它将整个字典对象写入到文件流中。 3. 应用程序启动时,`Form1_Load`事件处理程序检查“Notes”目录下的所有.txt文件,并将文件名添加到右侧的ListBox中,以便用户选择查看: ```csharp string sPath1 = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string sPath2 = "Notes"; string fullPath1 = Path.Combine(sPath1, sPath2); string[] strFiles = Directory.GetFiles(fullPath1, "*.txt"); if (strFiles.Length > 0) { foreach (string item in strFiles) { var s = Path.GetFileName(item); listBox1.Items.Add(s); } } ``` 4. 当用户在ListBox中选择一个条目时,`listBox1_SelectedValueChanged`事件处理程序读取选定文件,进行反序列化并显示在左侧: ```csharp if (listBox1.SelectedItem != null) { var FileName = listBox1.SelectedItem.ToString(); var fullPath2 = Path.Combine("Notes", FileName); using (FileStream fsRead = new FileStream(fullPath2, FileMode.Open, FileAccess.Read)) { BinaryFormatter bf1 = new BinaryFormatter(); // 二进制反序列化 Dictionary<string, string> dic2 = (Dictionary<string, string>)bf1.Deserialize(fsRead); // 显示反序列化后的数据(假设有相应的UI控件) } } ``` 在这个过程中,BinaryFormatter的Deserialize方法用于从文件流中恢复之前序列化的字典对象。 总结起来,这个案例展示了C#中如何使用二进制序列化来持久化对象状态,以及如何在程序启动时加载和显示这些数据。二进制序列化的优势在于其效率高、占用空间小,但缺点是序列化的数据对人类不友好,不易阅读,且不同版本的程序可能无法兼容以前序列化的数据。在实际开发中,根据项目需求,还可以考虑使用其他序列化技术,如XML序列化、JSON序列化等。
- 粉丝: 31
- 资源: 1万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助