张德长

导航

二进制序列化和反序列化--BinaryFormatter 类

基础知识:

序列化基本概念:

序列化 (C#)

序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。

序列化的工作原理

下图展示了序列化的整个过程:

将对象序列化为带有数据的流。 该流还可能包含有关对象类型的信息,例如其版本、区域性和程序集名称。 可以将此流中的对象存储在数据库、文件或内存中。

序列化的用途

通过序列化,开发人员可以保存对象的状态,并能在需要时重新创建对象,同时还能存储对象和交换数据。 通过序列化,开发人员可以执行如下操作:

  • 使用 Web 服务将对象发送到远程应用程序
  • 将对象从一个域传递到另一个域
  • 将对象通过防火墙传递为 JSON 或 XML 字符串
  • 跨应用程序维护安全或用户特定的信息

警告     二进制序列化可能会十分危险。

文件-路径-FileStream-StreamWriter/StreamReader的创建流程图

类的创建流程和数据流向图,便于理解其工作原理;

序列化代码

//数据存储地址
        private static  string path = Application.StartupPath + "\\data.bin";

        /// <summary>
        /// 将数据存储到文件的静态方法
        /// </summary>
        public static void SaveToFile()
        {
            FileStream stream = new FileStream(path,FileMode.OpenOrCreate);
            BinaryFormatter binary = new BinaryFormatter();
            binary.Serialize(stream,Data);
            stream.Close();
        }

反序列化代码

using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
        /// 从文件下载数据的静态方法
        /// </summary>
        public static void  LoadFromFile()
        {
            FileStream stream = new FileStream(path,FileMode.Open);
            BinaryFormatter binary = new BinaryFormatter();
            Data = binary.Deserialize(stream) as List<CBase>;
stream.Close();
        }

 

posted on 2022-04-11 00:29  张德长  阅读(655)  评论(0编辑  收藏  举报