• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# 对象持久化详解

C# 对象持久化详解

作者:飞翔的月亮 字体:[增加 减小] 来源:互联网 时间:2017-05-28

飞翔的月亮 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,crh2c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术。

本文介绍的是除数据库之外的几种对象持久化方式。

具体如下:

  1. 保存成文本:即将内存对象以字节流的方式保存到文本中。
  2. 序列化成Xml:即将对象以Xml的格式存储。
  3. 序列化成Json:即将对象序列化成Json对象,然后存储。
  4. 序列化成二进制:即将对象序列化成二进制字节流保存到文件中。

涉及知识点:

  1. 序列化与反序列化
  2. 文件流的读写
  3. ListView显示复选框,并横向排列

如下图所示【主要功能是将用户输入的信息保存成各种格式,并从各个文档中进行读取出来】:

保存和读取文本文档代码如下:

/// <summary>
  /// 保存成文本
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnSaveTxt_Click(object sender, EventArgs e)
  {
   Dictionary<string, string> dicInfos = GetDictionaryInfos();
   string filePath = "objPerson.txt";
   //采用using关键字,会自动释放
   using (FileStream fs = new FileStream(filePath, FileMode.Create))
   {
    using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
    {
     foreach (var keyPair in dicInfos)
     {
      sw.WriteLine(string.Format("{0}={1}", keyPair.Key, keyPair.Value));
     }
    }
   }
  }
  /// <summary>
  /// 从文本中读取
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnReadTxt_Click(object sender, EventArgs e)
  {
   string filePath = "objPerson.txt";
   Dictionary<string, string> dic = new Dictionary<string, string>();
   //采用using关键字,会自动释放
   using (FileStream fs = new FileStream(filePath, FileMode.Open))
   {
    using (StreamReader sw = new StreamReader(fs, Encoding.Default))
    {
     while (!sw.EndOfStream) {
      string lineInfo = sw.ReadLine();
      dic.Add(lineInfo.Split('=')[0], lineInfo.Split('=')[1]);
     }
    }
   }
   this.txtName.Text = dic["Name"];
   this.dtBirthday.Text = dic["Birthday"];
   if (dic["Gender"] == this.rbBoy.Text)
   {
    this.rbBoy.Checked = true;
   }
   else {
    this.rbGirl.Checked = true;
   }
   string[] loves = dic["Love"].Split('|');
   foreach (var love in loves)
   {
    foreach (var item in this.lsvLove.Items)
    {
     ListViewItem li = item as ListViewItem;
     if (li.Text == love)
     {
      li.Checked = true;
     }
    }
   }
  }
</div>

保存和读取Xml文档代码如下:

/// <summary>
  /// 保存成Xml
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnSaveXml_Click(object sender, EventArgs e)
  {
   Person p = GetPersonInfos();
   string filePath = "objPerson.xml";
   using (FileStream fs = new FileStream(filePath, FileMode.Create))
   {
    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    serializer.Serialize(fs, p);
   }
  }
  /// <summary>
  /// 从Xml中读取
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnReadXml_Click(object sender, EventArgs e)
  {
   string filePath = "objPerson.xml";
   Person p;
   using (FileStream fs = new FileStream(filePath, FileMode.Open))
   {
    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    object obj= serializer.Deserialize(fs);
    p = obj as Person;
   }
   SetPersonInfos(p);
  }
</div>

保存和读取Json文档如下:

/// <summary>
  /// 保存成Json
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnSaveJson_Click(object sender, EventArgs e)
  {
   Person p = GetPersonInfos();
   JavaScriptSerializer jserializer = new JavaScriptSerializer();
   string strJson = jserializer.Serialize(p);
   string strRegex = @"\\/Date\((\d+)\)\\/";
   MatchEvaluator evaluator = new MatchEvaluator(ConvertJsonDateToDateString);

   //对时间进行处理,需要引用System.Text.RegularExpressions;命名空间
   Regex reg = new Regex(strRegex);
   strJson = reg.Replace(strJson, evaluator);
   string filePath = "objPerson.json";
   using (FileStream fs = new FileStream(filePath, FileMode.Create))
   {
    using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
    {
     sw.Write(strJson);
    }
   }
  }
  /// <summary>
  /// 从Json中读取
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnReadJson_Click(object sender, EventArgs e)
  {
   JavaScriptSerializer jserializer = new JavaScriptSerializer();
   string filePath = "objPerson.json";
   Person p;
   using (FileStream fs = new FileStream(filePath, FileMode.Open))
   {
    using (StreamReader sw = new StreamReader(fs, Encoding.Default))
    {
     string strJson = sw.ReadToEnd();
     string strRegex = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
     MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate); //对时间进行处理
     Regex reg = new Regex(strRegex);
     strJson = reg.Replace(strJson, evaluator);
     p = jserializer.Deserialize<Person>(strJson);
    }
   }
   SetPersonInfos(p);
  }
</div>

保存和读取Bin文档如下:

/// <summary>
  /// 保存成二进制文件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnSaveBin_Click(object sender, EventArgs e)
  {
   Person p = GetPersonInfos();
   string filePath = "objPerson.bin";
   using (FileStream fs = new FileStream(filePath, FileMode.Create)) {
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(fs, p);
   }
  }
  /// <summary>
  /// 读取二进制文件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnReadBin_Click(object sender, EventArgs e)
  {
   string filePath = "objPerson.bin";
   Person p;
   using (FileStream fs = new FileStream(filePath, FileMode.Open))
   {
    BinaryFormatter bf = new BinaryFormatter();
    p= bf.Deserialize(fs) as Person;
   }
   SetPersonInfos(p);
  }
</div>

备注:其实对象持久化和对象序列化是两个不同的概念。两者有关联却不同。

对象持久化:是使对象可以保存到实体存储介质中,在对象生命周期结束后可以再现。

对象序列化:是将对象或者数据结构转化成特定的格式,使其可在网络中传输,或者可存储在内存或者文件中。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28C#的winform控件命名规范
  • 2017-05-28c#文件名/路径处理方法示例
  • 2017-05-28C#使用foreach语句搜索数组元素的方法
  • 2017-05-28C#调用存储过程详解(带返回值、参数输入输出等)
  • 2017-05-28C#零基础学习理解委托
  • 2017-05-28C# 大小写转换(金额)实例代码
  • 2017-05-28C#获取上个月第一天和最后一天日期的方法
  • 2017-05-28C#多线程编程中的锁系统(二)
  • 2017-05-28C#实现关闭其他程序窗口或进程代码分享
  • 2017-05-28C#键盘鼠标钩子实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现利用Windows API读写INI文件的方法
    • C#简单的特殊输出实例
    • C#操作XML通用方法汇总
    • C#实现DataList里面嵌套DataList的折叠菜单
    • C#中foreach语句使用break暂停遍历的方法
    • C#无损转换Image为Icon的方法
    • C#获取Word文档中所有表格的实现代码分享
    • C# 正则判断一个数字的格式是否有逗号的代码
    • 深入C#中使用SqlDbType.Xml类型参数的使用详解
    • c#实现一元二次方程求解器示例分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有