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

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

序列化与反序列化是.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的序列化与反序列化有一定的借鉴帮助作用。

标签:.net,序列化,反序列化
0
投稿

猜你喜欢

  • Andriod使用多线程实现轮播图片

    2023-07-27 15:47:31
  • 登录验证全局控制的几种方式总结(session)

    2022-09-03 15:25:41
  • Java实现解出世界最难九宫格问题

    2022-06-14 19:47:10
  • Java spring的三种注入方式详解流程

    2021-07-02 12:25:47
  • Android重力传感器实现滚动的弹球

    2023-05-04 05:49:28
  • Spring事务失效的场景梳理总结

    2023-02-23 16:23:24
  • C#使用CefSharp实现内嵌网页详解

    2022-04-12 15:02:00
  • 使用String类型小数值转换为Long类型

    2023-04-14 10:34:56
  • 完整详解Java开发学习路线指南

    2023-05-13 08:34:35
  • 基于jdk1.8的Java源码详解 Integer

    2023-05-08 11:32:22
  • 解决BigDecimal转long丢失精度的问题

    2022-07-16 13:44:22
  • java定时任务Timer和TimerTask使用详解

    2023-07-13 00:29:33
  • Android引用开源框架通过AsyncHttpClient实现文件上传

    2021-09-22 20:02:05
  • Android 7.0调用相机崩溃详解及解决办法

    2023-08-08 21:39:42
  • MyBatis传入参数为List对象的实现

    2021-12-14 20:16:06
  • 详解Android性能优化之启动优化

    2023-07-16 06:00:07
  • 不知道面试会不会问Lambda怎么用(推荐)

    2021-07-27 21:37:30
  • Java Spring之@Async原理案例详解

    2023-05-31 17:13:15
  • SpringCloud Zuul基本使用方法汇总

    2023-11-14 15:21:54
  • Android使用TextView跑马灯效果

    2022-05-20 20:07:20
  • asp之家 软件编程 m.aspxhome.com