版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十二章序列化和反序列化回顾与作业点评按要求完成编码从控制台输入“我喜欢学习C# 语言!”,并保存到D盘hobby.txt将此文件从D盘复制到E盘Test目录下读“E:hobby.txt”,将文件内容输出到控制台预习检查将实例对象的状态存储到存储介质中的过程称为什么?本章任务完成“网络电视精灵”序列化方式持久化“我的电视台”和“提醒信息”实现节目播放功能实现定时提醒功能本章目标理解序列化和反序列化的概念能够使用序列化/反序列化保持和恢复对象状态扩展持久化信息对“网络电视精灵”持久化信息进行扩展定制的“我的电视台”提醒信息增加提醒信息将提醒信息写入save.txt文件12扩展持久化信息/对定制的
2、电视台信息进行保存/添加对Remind的保存for (int index = 0; index this.seria.MyRemind.Count; index+) Remind remind = this.seria.MyRemindindex; writer.WriteLine(remind.MyProgram.PlayTime + | + remind.MyProgram.Median + | + remind.MyProgram.ProgramName + | + remind.MyProgram.FilePath + | + remind.RemindTime + | + remin
3、d.OwnChannel);1修改SaveAsText()方法 遍历提醒集合,依次将信息写入文本文件/读取“我的电视台”/ 读取提醒信息line = reader.ReadLine();Remind remind = null;while (line != -End of Remind-) remind = new Remind(); propertyValues = line.Split(|); remind.MyProgram.PlayTime = Convert.ToDateTime(propertyValues0); remind.MyProgram.Median = property
4、Values1; . this.seria.MyRemind.Add(remind); line = reader.ReadLine();演示示例:保存和加载提醒信息逐行读取提醒信息,并封装为Remind对象修改LoadFromText()方法 2扩展的麻烦添加更多的配置信息能否避免繁琐的保存和读取操作?需要编写大量重复繁琐的代码每次增加配置信息都要修改保存和加载的方法内存C# 对象文本文件对象属性值神奇的方式保存对象的“全景图”内存C# 对象文件对象的二进制格式public void Save() FileStream fs = new FileStream(filessave.bin, F
5、ileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, this.seria); fs.Close();直接保存对象序列化反序列化public void Load() /省略判断文件是否存在 FileStream fs = new FileStream(filessave.bin, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); this.seria = (SavingInfo)bf.Deserialize(fs); fs.
6、Close();直接获取整个对象这种方式称为序列化与反序列化什么是序列化序列化SavingInfo对象Seria提醒信息集合对象myRemind 我的电视台集合对象myFavor存储介质存储序列化是将对象的状态存储到特定存储介质中的过程内存使用序列化要存储的对象标记为可序列化,包括它的父类和属性的类使用二进制方式存储对象Serialize的语法using System.Runtime.Serialization.Formatters.Binary; /命名空间FileStream fs = new FileStream(filessave.bin, FileMode.Create);Binar
7、yFormatter bf = new BinaryFormatter();bf.Serialize(fs, this.seria);Serializablepublic class SavingInfo二进制格式化器将对象以二进制方式格式化为流Serialize ( Stream serializationStream, Object graph) 流对象演示示例:序列化保存个性化信息RemindChannelBaseTypeAChannelTypeBChannelTvProgram序列化的过程格式化程序 对象可否序列化对象的成员可否序列化将对象格式化写入存储介质异常退出检验序列化对象中的成
8、员 YYNN检验是否标识为Serializable 什么是反序列化把SavingInfo对象存储成文件,怎么取出来呢?读取反序列化则是从特定存储介质中的数据重新构建对象的过程 存储介质SavingInfo对象Seria提醒信息集合对象myRemind 我的电视台集合对象myFavor数据转换为对象内存使用反序列化将序列化好的SavingInfo数据反序列化为对象Deserialize的语法FileStream fs = new FileStream(filessave.bin, FileMode.Open);BinaryFormatter bf = new BinaryFormatter();
9、this.seria = (SavingInfo)bf.Deserialize(fs);fs.Close();将指定流反序列化类型转换public Object Deserialize ( Stream serializationStream ) 流对象需要类型转换演示示例:反序列化获取个性化信息序列化和反序列化优势保存了对象的“全景图”能追踪对象内所包含的所有引用,并保存那些对象,又能对对象内包含的每个这样的引用进行追踪,依次类推,形成“对象网”几个重要的类SerializableAttributeFormatter应用场合将对象状态持久化到文件分布式应用(网络上传输对象)特性特性(attr
10、ibutes)添加的元数据,即一些描述性关键字添加针对程序中的元素如:类、字段、方法、属性命名时以Attribute结尾: SerializableAttribute使用时省略AttributeSerializablepublic class SavingInfo标识应用的元素是可被序列化的可序列化就是这个类的一个特性public sealed class SerializableAttribute 特性其实是一个类标识不能被继承使用特性C# 常用特性ObsoleteAttributeclass Program Obsolete(不要使用旧的方法, 请使用新的方法, true) static
11、void Old() static void New() public static void Main() Old(); 标记不该再被使用的方法Old()Old被调用时,视为一种错误如果设为false,调用时不视为错误演示示例:使用预定义特性Obsolete即: ObsoleteAttribute类定义自己的特性定义特性满足个性化需求记录代码作者class AuthorAttribute:Attribute public string Name; public string Version; public AuthorAttribute() public AuthorAttribute(st
12、ring name,string version) this.Name = name; this.Version = version; 定义特性以Attribute结尾自定义特性必须继承Attribute类使用自定义特性Author(盖茨,1.0)class MyText public void Show() Console.WriteLine(Hello!); 以Author或AuthorAttribute作为特性名给属性赋值static void Main(string args) AuthorAttribute authorAttributed = (AuthorAttribute)At
13、tribute.GetCustomAttribute(typeof(MyText),typeof(AuthorAttribute); if (authorAttributed != null) Console.WriteLine(Name:0,authorAttributed.Name); Console.WriteLine(Version:0,authorAttributed.Version); 获取特性信息运行时查看代码作者和版本演示示例:运行时获取属性附加信息指导用户及订单信息训练要点序列化与反序列化需求说明网上购物时某用户填写订单,订单内容为产品列表,保存在“save.bin”中运行时
14、,如果不存在“save.bin”,则进行新订单录入,如果存在,则显示并计算客户所需付款指导用户及订单信息实现思路编写Init()方法提供从控制台输入购买信息编写Save()方法保存对象到“save.bin”编写Load()方法获得对象,计算客户所需付款完成时间:25分钟练习持久化定制信息需求说明序列化方式保存用户定制的自己喜欢的电视台和提醒信息反序列化解析用户定制的信息,并在系统启动时进行加载完成时间:25分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解练习实现节目播放需求说明完善“网络电视精灵”,实现节目播放功能完成时间:20分钟共性问题集中讲解常见调试问题及解决办法代
15、码规范问题共性问题集中讲解指导实现动态提醒窗体训练要点复习动态加载控件给控件动态绑定事件需求说明编写提醒窗体,根据提醒节目列表,动态显示以下内容节目名称节目播放链接点击节目名称,可进行播放指导实现动态提醒窗体难点分析动态加载控件给控件动态绑定事件1、创建对象2、设置对象属性3、添加到窗体:this.Controls.Add(lb);Label对象/给控件绑定单击事件lb.Click += new EventHandler(lb_Click);public void lb_Click(object sender, EventArgs e) PlayForm play = PlayForm.GetSingleton(); Label lb = (Label)sender; TvProgram tv = (TvProgram)lb.Tag; play.Play(tv.FilePath); play.Show();完成时间:25分钟编写标签响应事件练习实现定时提醒需求说明时钟每隔1分钟进行扫描,查看提醒节目列表,按照提醒时间,定时弹出提醒窗口完成时间:20分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解“网络电视精灵”总结总结实现思路分析需求,抽象出类及类之间的关系搭建项目,编写类搭建窗体,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字电视安装质量保证协议
- 2024专业版商业合作合同书
- 房屋建筑工程清包合同格式
- 集资房指标转让协议书
- 婚前购房协议书范本
- 技术合作三方协议
- 国际快递服务协议范本
- 2024年购车借款协议书范本
- 股权分红协议书模板
- 二手购房合同协议范本
- 坐标纸(网格型坐标纸-直接打印即可)
- 占比分析类PPT模板
- GB/T 21633-2020掺混肥料(BB肥)
- GB/T 21435-2008相变加热炉
- 河南省洛阳市《综合能力测试》事业单位国考真题
- 智慧消防整体解决方案消防大数据一体化管理平台解课件
- 《推窗风来》中考语文作文优秀6篇
- 腹部血管疾病的超声诊断课件整理
- 《客源国概论》期末考试题
- 公司吸烟管理规定范文
- 《江苏省建筑业10项新技术(2021)》
评论
0/150
提交评论