首页 > 代码库 > .net学习笔记--序列化与反序列化

.net学习笔记--序列化与反序列化

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

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

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

拥有需要的对象之后:1.将对象转换为二进制数据 使用专门的对像进行转换 BinaryFormatter

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

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

例子代码如下:

 

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 using System.Runtime.Serialization.Formatters.Binary; 8 namespace ConsoleApplication1 9 {10     class Program11     {12         static void Main(string[] args)13         {14             Person per;//将要被序列化的对象15             Console.WriteLine("------序列化与反序列化------");16             Console.WriteLine("是否读取已经序列化的对象per");17             string str = Console.ReadLine();18             if (str == "yes")19             {20                 if (!File.Exists("save.bin"))21                 {22                     Console.WriteLine("你还没有将per序列化");23                     return;24                 }25                 using (FileStream fs = new FileStream("save.bin", FileMode.Open))26                 {27                     BinaryFormatter bf = new BinaryFormatter();28                     per = bf.Deserialize(fs) as Person;//将二进制数据转换为per对象29                     per.SayHi();30                     Console.ReadLine();31                 }32             }33             else34             {35                 per = new Person();36                 per.Name = "小李";37                 using(FileStream fs=new FileStream("save.bin",FileMode.Create))38                 {39                     BinaryFormatter bf = new BinaryFormatter();40                     bf.Serialize(fs,per);//将per对象转换成二进制数据,并保存。41                     Console.WriteLine("序列化成功");42                     Console.ReadLine();43                 }44             }45                 49         }50     }51     [Serializable]52     class Person53     {54         public string Name;55         public void SayHi()56         {57             Console.WriteLine("hello {0}",Name);58         }59     }60 }