本文以一个简单的小例子,简述对象持久化的相关知识,仅供学习分享使用,如有不足之处,还请指正。
概述
对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术。
本文介绍的是除数据库之外的几种对象持久化方式。
具体如下:
- 保存成文本:即将内存对象以字节流的方式保存到文本中。
- 序列化成Xml:即将对象以Xml的格式存储。
- 序列化成Json:即将对象序列化成Json对象,然后存储。
- 序列化成二进制:即将对象序列化成二进制字节流保存到文件中。
涉及知识点:
效果图
如下图所示【主要功能是将用户输入的信息保存成各种格式,并从各个文档中进行读取出来】:
核心代码
保存和读取文本文档代码如下:
1 /// <summary> 2 /// 保存成文本 3 </summary> 4 <param name="sender"></param> 5 <param name="e"></param> 6 private void btnSaveTxt_Click(object sender,EventArgs e) 7 { 8 Dictionary<string,string> dicInfos = GetDictionaryInfos(); 9 string filePath = "objPerson.txt"; 10 //采用using关键字,会自动释放 11 using (FileStream fs = new FileStream(filePath,FileMode.Create)) 12 { 13 using (StreamWriter sw = StreamWriter(fs,Encoding.Default)) 14 { 15 foreach (var keyPair in dicInfos) 16 { 17 sw.WriteLine(string.Format({0}={1},keyPair.Key,keyPair.Value)); 18 } 19 } 20 } 21 } 22 23 24 从文本中读取 25 26 27 28 void btnReadTxt_Click(29 30 31 Dictionary<string> dic = new Dictionary<string>(); 32 33 34 35 using (StreamReader sw = StreamReader(fs,1)">36 37 while (!sw.EndOfStream) { 38 string lineInfo = sw.ReadLine(); 39 dic.Add(lineInfo.Split('=')[0],lineInfo.Split(1]); 40 41 42 43 this.txtName.Text = dic[Name]; 44 this.dtBirthday.Text = dic[Birthday45 if (dic[Gender"] == this.rbBoy.Text) 46 47 this.rbBoy.Checked = true48 49 else { 50 this.rbGirl.Checked = 51 52 string[] loves = dic[love"].Split(|'); 53 var love loves) 54 55 var item in .lsvlove.Items) 56 57 ListViewItem li = item as ListViewItem; 58 if (li.Text == love) 59 60 li.Checked = 61 62 63 64 }
保存和读取Xml文档代码如下:
1 保存成Xml void btnSaveXml_Click( 8 Person p = GetPersonInfos(); objPerson.xml11 12 XmlSerializer serializer = new XmlSerializer(typeof(Person)); 13 serializer.Serialize(fs,p); 15 16 17 18 从Xml中读取 19 20 21 22 void btnreadxml_Click(23 24 25 Person p; 26 27 28 XmlSerializer serializer = 29 object obj= serializer.Deserialize(fs); 30 p = obj Person; 31 32 SetPersonInfos(p); 33 }
保存和读取Json文档如下:
1 保存成Json void btnSaveJson_Click( 9 JavaScriptSerializer jserializer = JavaScriptSerializer(); string strjson = jserializer.Serialize(p); string strRegex = @"\\/Date\((\d+)\)\\/12 MatchEvaluator evaluator = MatchEvaluator(ConvertJsonDatetoDateString); 13 14 对时间进行处理,需要引用System.Text.RegularExpressions;命名空间 15 Regex reg = Regex(strRegex); 16 strjson = reg.Replace(strjson,evaluator); 17 18 objPerson.json19 21 22 sw.Write(strjson); 24 26 27 28 29 从Json中读取 30 31 32 33 void btnReadJson_Click(35 JavaScriptSerializer jserializer = 36 37 38 39 40 42 sw.ReadToEnd(); 43 string strRegex = \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}44 MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate); 对时间进行处理 45 Regex reg = 46 strjson =47 p = jserializer.Deserialize<Person>(strjson); 49 50 51 }
保存和读取Bin文档如下:
保存成二进制文件 void btnSaveBin_Click(objPerson.bin11 BinaryFormatter bf = BinaryFormatter(); bf.Serialize(fs,1)">15 16 读取二进制文件 21 void btnReadBin_Click(23 25 27 BinaryFormatter bf = 28 p= bf.Deserialize(fs) 30 31 }
备注
其实对象持久化和对象序列化是两个不同的概念。两者有关联却不同。
对象持久化:是使对象可以保存到实体存储介质中,在对象生命周期结束后可以再现。
对象序列化:是将对象或者数据结构转化成特定的格式,使其可在网络中传输,或者可存储在内存或者文件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。