C# 序列化(二)二进制序列化的案例

这篇是针对上一篇讲序列化的文章的一个实际案例,WinForm程序的主界面如下:

思路:在点击保存按钮时,将标题和内容保存到集合中,自然想到应该是Dictionary<K,V>,而且用这个集合可以避免产生2个相同标题的日记。对添加到集合中的数据,采用二进制序列化到文件中,在程序执行目录中专门建一个“Notes”的文件夹存放日记文件,日记文件的文件名以标题命名。程序加载的时候,如果“Notes”文件夹下有文件,就在右侧列表中加载文件,点击时反序列化后显示在左侧。下面是具体代码:

在Form1类下定义一个集合:

1 Dictionary<string, string> dic = new Dictionary<string, string>();

“保存”按钮的点击操作代码如下:

 1             var sTitle = txtTitle.Text.Trim();
 2             var sContent = txtContent.Text.Trim();
 3
 4             dic.Add(sTitle, sContent);
 5
 6             string fullPath = Path.Combine("Notes", sTitle + ".txt");
 7             using (FileStream fsWrite=new FileStream(fullPath,FileMode.Create,FileAccess.Write))
 8             {
 9                 //进行二进制序列化
10                 BinaryFormatter bf = new BinaryFormatter();
11                 bf.Serialize(fsWrite, dic);
12                 MessageBox.Show("添加日记成功");
13             }

在Form1_Load中的事件处理代码如下:

 1             string sPath1 = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 2             string sPath2 = "Notes";
 3             string fullPath1 = Path.Combine(sPath1, sPath2);
 4             string[] strFiles = Directory.GetFiles(fullPath1, "*.txt");
 5
 6             if (strFiles.Length>0)
 7             {
 8                 foreach (string item in strFiles)
 9                 {
10                     var s = Path.GetFileName(item);
11                     listBox1.Items.Add(s);
12                 }
13             }

在listBox1_SelectedValueChanged中的事件处理代码如下:

 1           if (listBox1.SelectedItem!=null)
 2             {
 3                 var FileName = listBox1.SelectedItem.ToString();
 4                 var fullPath2 = Path.Combine("Notes", FileName);
 5                 using (FileStream fsRead=new FileStream(fullPath2,FileMode.Open,FileAccess.Read))
 6                 {
 7                     BinaryFormatter bf1 = new BinaryFormatter();
 8                     //进行二进制反序列化
 9                     Dictionary<string, string> dic2 = bf1.Deserialize(fsRead) as Dictionary<string, string>;
10                     foreach (KeyValuePair<string,string> item in dic2)
11                     {
12                         txtTitle.Text = item.Key;
13                         txtContent.Text = item.Value;
14                     }
15                 }
16             }
17             else
18             {
19                 MessageBox.Show("请选择要查看的文件");
20             }

总结:

程序还有些Bug,因为主要的重点是放在序列化的使用上,日后如果有时间再完善功能吧。

1.对于新添加的日记,需要在下一次程序启动中才会加载到右侧listBox中(想法是做到保存后就加载到listBox);

2.对于日记的修改,修改内容后,点击保存,可适时看到修改的变化;而如果把标题和内容都修改了,程序则认为是一个全新的日记(Dictionary集合会因为key的不同,而重新添加)。

C# 序列化(二)二进制序列化的案例,布布扣,bubuko.com

时间: 2024-10-12 22:30:31

C# 序列化(二)二进制序列化的案例的相关文章

java编解码技术,json序列化与二进制序列化

1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2.适用场景 小编觉得当数据采用json传输的时候,适用与web与控制层的转换,前端js对json的支持较好,而程序内部系统与系统之间采用二进制序列化编码形式进行编码进行数据传输,这样可提高数据传输效率 3.优缺点 json序列化有点就是通俗易懂,常用,易于与前端交互,缺点就是没有二进制序列化后的数据传

IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件 using System.IO; /// <summary> /// 配置绝对路径 /// </summary> private static string LogPath = ConfigurationManager.AppSettings["LogPath&

Memcached 类库 EnyimMemcached 下的JSON序列化和二进制序列化兼容

Jusfr 原创,转载请注明来自博客园,文章所用代码见于我的github . 本人在分布式的项目使用中 EnyimMemcached ,由于业务需求使用了其序列化扩展,这里作下记录. EnyimCaching 通过配置文件提供了扩展点,见github,序列化由 ITranscoder 接口定义,提供了 DefaultTranscoder 和 DataContractTranscoder 两个实现类,前者作为默认,后面以XML序列化的方式重写了前者的对象序列化方法. EnyimCaching 是很

深入认识二进制序列化--记一次生产事故的思考

一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路.本文从一次生产环境的事故引入这个话题,通过对于事故的分析过程,探讨了平时没有关注到的一些技术要点.二进制序列化结果并不像Json序列化一样具备良好的可读性,对于序列化的结果大多数人并不了解,因此本文最后通过实际的例子,对照MSDN的文档对于序列化结果进行详细解析,并意图通过本次分析对于二进制序列化的结果有直观和深入的认识. 二

018.序列化与反序列化的使用案例

序列化反序列化: 序列化:串行化 对象持久化 将对象存储到文件或数据库的字段中 反序列化:将文件恢复成对象 作用: 1.永久保存数据 2.传递数据 要序列化的对象对应的类以及类的属性.子类必须是可序列化的 实现序列化反序列化需要引用命名空间: Using system.runtime.seralization.formatters.binary; Runtime 运行时 serialization 序列化 Formatters 格式化程序,格式器 Binary 二进制的 使用实例:题==>创建一

二进制序列化与反序列化。Net理论篇上(一)

对于从事底层信息通信的同行而言,序列化及反序列化想必都是耳熟能详的.脱离很多书面的标准概念,就个人理解而言,序列化和反序列化的本质其实为了找到一种公共的通用的数据格式达到一个无界的境界,正如方言对于普通话,各国语言对于英语.而我们需要做的是去发现这么一种具体的格式,并且完成一个相对对称的特性,如同压缩跟解压缩. 常规的序列化和反序列化的格式通常有如下几种:binary,JSON, XML和SOAP等. 当然有其他的,这个只能恕我孤陋寡闻了.通常我们会选取短小精悍的JSON 和更具通用的XML,当

提供了对GoogleProtobuf二进制序列化框架的支持

第一层:Reactor通信调度层.该层的主要职责就是监听网络的连接和读写操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建.连接激活.读事件.写事件等,将这些事件触发到Pipeline中,再由Pipeline充当的职责链来进行后续的处理. 第二层:职责链Pipeline层.负责事件在职责链中有序的向前(后)传播,同时负责动态的编排职责链.Pipeline可以选择监听和处理自己关心的事件. 第三层:业务逻辑处理层,一般可分为两类:a. 纯粹的业务逻辑处理,例如日志.订单

[LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another comput

C# 序列化之二进制

序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. 一般有三种方式:1.是使用BinaryFormatter进行串行化二进制序列化:2.使用XmlSerializer进行串行化的XML序列化:3.使用SOAP协议进行序列化.这里先总结二进制序列化. 命名空间:System.Runtime.Serialization.Formatters.Binary; System.IO; 1).先建一个