软件编程
位置:首页>> 软件编程>> C#编程>> .net实现序列化与反序列化实例解析

.net实现序列化与反序列化实例解析

作者:shichen2014  发布时间:2022-08-05 06:42:08 

标签:.net,序列化,反序列化

序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法。具体如下:

一般来说,.net中的序列化其实就是将一个对象的所有相关的数据保存为一个二进制文件(注意:是一个对象)

而且与这个对象相关的所有类型都必须是可序列化的所以要在相关类中加上 [Serializable]特性

对象类型包括:对象本身包含的类型,父类

拥有需要的对象之后:

1.将对象转换为二进制数据 使用专门的对像进行转换 BinaryFormatter

2.将二进制数据写入到文件 FileSteam

反序列化则是把二进制文件转换为一个对象

示例代码如下所示:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication1
{
 class Program
 {
   static void Main(string[] args)
   {
     Person per;//将要被序列化的对象
     Console.WriteLine("------序列化与反序列化------");
     Console.WriteLine("是否读取已经序列化的对象per");
     string str = Console.ReadLine();
     if (str == "yes")
     {
       if (!File.Exists("save.bin"))
       {
         Console.WriteLine("你还没有将per序列化");
         return;
       }
       using (FileStream fs = new FileStream("save.bin", FileMode.Open))
       {
         BinaryFormatter bf = new BinaryFormatter();
         per = bf.Deserialize(fs) as Person;//将二进制数据转换为per对象
         per.SayHi();
         Console.ReadLine();
       }
     }
     else
     {
       per = new Person();
       per.Name = "小李";
       using(FileStream fs=new FileStream("save.bin",FileMode.Create))
       {
         BinaryFormatter bf = new BinaryFormatter();
         bf.Serialize(fs,per);//将per对象转换成二进制数据,并保存。
         Console.WriteLine("序列化成功");
         Console.ReadLine();
       }
     }

}
 }
 [Serializable]
 class Person
 {
   public string Name;
   public void SayHi()
   {
     Console.WriteLine("hello {0}",Name);
   }
 }
}

相信本文实例对于大家进一步理解.net的序列化与反序列化有一定的借鉴帮助作用。

0
投稿

猜你喜欢

  • 本文实例讲述了在Linux上运行C#的方法。分享给大家供大家参考。具体方法如下:在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个
  • 本文实例讲述了C#使用foreach语句遍历堆栈(Stack)的方法。分享给大家供大家参考。具体如下:using System;using
  • 本文实例为大家分享了Java实现图书借阅系统的具体代码,供大家参考,具体内容如下为图书阅览室开发一个图书借阅系统,最多可存50本图书,实现图
  • 本文实例讲述了Java删除二叉搜索树的任意元素的方法。分享给大家供大家参考,具体如下:一.删除思路分析在删除二叉搜索树的任意元素时,会有三种
  • 前言本文给你提供在Spring Boot 应用程序中编写好的单元测试的机制,并且深入技术细节。我们将带你学习如何以可测试的方式创建Sprin
  • 一、前言在Spring中,事务有两种实现方式:编程式事务管理: 编程式事务管理使用TransactionTemplate可实现更细
  • 一、创建项目创建一个简单的Java项目,其中Main.java为主函数,包含main方法:二、完成JAR配置进入File->Proje
  • Java ThreadPoolExecutor的参数深入理解一、使用Executors创建线程池    &nb
  • 代码复现不要,思考一下会打印出什么?List<String> list1 = new ArrayList<>(Arr
  • 刚开始我以为熔断和降级是一体的,以为他们必须配合使用; 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西;降级什么是服务
  • 一、前言高效、合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑。接下来会介绍一下常用一
  • 这篇文章主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
  • 微信开发API如何接入服务器,下面就为大家进行介绍一、说明* 本示例根据微信开发文档:http://mp.weixin.qq.com/wik
  • 前言dataGridView是常用的表格控件,实现分页的方式也有很多种,例如直接使用sql语言,配合存储方式,直接读取某一页的内容,大家如果
  • 很多C#的教材都会强调对象相等的概念。我们都知道,在C#的世界里存在两种等同性。一种是逻辑等同性:如果两个对象在逻辑上代表同样的值,则称他们
  • 前言最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大
  • Java对自动登陆功能的简单实现,仅用到了servlet和一个filter。第一次写博文,如有不足的地方,敬请指正,谢谢。登陆界面<%
  • 本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时
  • 本文实例讲述了基于JavaMail API收发邮件的方法。分享给大家供大家参考。具体如下:1.JavaMail API按其功能划分通常可分为
  • 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对
手机版 软件编程 asp之家 www.aspxhome.com