C# 中的序列化和反序列化示例

C# 中的序列化和反序列化

每当需要将与对象有关的数据从一个应用程序发送到另一个应用程序时,就会使用序列化和反序列化的概念。序列化用于将应用程序数据导出到文件中。然后,目标应用程序使用反序列化从应用程序中提取数据以供进一步使用。

序列化是将 C# 类对象写入或序列化到文件的概念。假设您有一个名为 Tutorial 的 C# 类。该类有 2 个属性:ID 和 Tutorials 名称。

序列化可用于将 Tutorial 类的数据属性直接写入文件。反序列化用于从文件中读取数据并再次构造 Tutorial 对象。

如何在 C# 中序列化对象

让我们看一个例子来了解如何实现这一点。

在我们的示例中,我们将在代码中执行以下高级步骤

  1. 创建一个名为 Tutorial 的类,它有 2 个属性,分别是 ID 和 Name
  2. 然后,我们将从类中创建一个对象,并为 ID 属性分配值“1”,为 name 属性分配值“.Net”。
  3. 然后我们将使用序列化将上述对象序列化为名为 Example.txt 的文件
  4. 最后,我们将使用反序列化从文件中反序列化对象并在控制台中显示其值。


在控制台应用程序的 program.cs 文件中输入以下代码。

步骤1) 添加课程。

第一步是添加用于序列化的类

在 C# 中序列化对象

代码说明:-

  1. 需要序列化的类需要具有 [Serializable] 属性。这是 C# 中的一个关键字。然后,此关键字将附加到 Tutorial 类。如果您不提及此属性,则在尝试序列化该类时会收到错误。
  2. 接下来是要序列化的类的定义。这里我们定义一个名为“Tutorial”的类,并提供 2 个属性,一个是“ID”,另一个是“Name”。

步骤2) 创建对象。

在此步骤中,首先我们将创建 Tutorial 类的对象并将其序列化为名为 Example.txt 的文件

在 C# 中序列化对象

代码说明:-

  1. 首先,我们创建 Tutorial 类的一个对象。然后我们给 ID 赋值“1”,给 name 属性赋值“.net”。
  2. 然后我们使用格式化程序类,该类用于序列化或将对象转换为二进制格式。序列化文件中的数据采用二进制格式。接下来,我们创建一个文件流对象。文件流对象用于打开文件 Example.txt 进行写入。关键字 FileMode.Create 和 FileMode.Write 用于特别提及应打开文件进行写入。
  3. 最后,我们使用 Serialize 方法将二进制数据传输到文件。然后我们关闭流,因为写入 操作 做完了。

步骤3) 使用反序列化。

最后,为了确保数据存在于文件中,我们使用反序列化从文件中反序列化对象。

在 C# 中序列化对象

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

代码说明:-

  1. 我们创建对象“”以只读模式打开文件 Example.txt。
  2. 然后我们使用格式化程序类来反序列化存储在Example.txt文件中的对象。返回的对象被设置为对象objnew。
  3. 最后,我们使用“ID”和“name”属性将对象“objnew”的属性显示到控制台。

设置上述代码后,使用以下方法运行项目 Visual Studio中,你将获得以下输出。

输出:-

在 C# 中序列化对象

从上面的输出中您可以看到文件中的值已被正确反序列化并显示在控制台中。

结语

序列化用于将类对象写入文件。

反序列化用于从文件中恢复对象。