C# 中的序列化与反序列化(附示例)
C# 中的序列化与反序列化
序列化和反序列化的概念用于将与对象相关的数据从一个应用程序发送到另一个应用程序。序列化用于将应用程序数据导出到文件。然后,目标应用程序使用反序列化从应用程序中提取数据以供进一步使用。
序列化是一种将 C# 类对象写入或序列化到文件的概念。假设你有一个名为 Tutorial 的 C# 类。该类具有 ID 和 Tutorial 名称两个属性。
序列化可用于直接将 Tutorial 类的这些数据属性写入文件。反序列化用于从文件读取数据并重新构建 Tutorial 对象。
如何在 C# 中序列化对象
让我们看一个如何实现这一目标的例子。
在我们的示例中,我们将在代码中执行以下高级步骤:
- 创建一个名为 Tutorial 的类,该类具有 ID 和 Name 两个属性。
- 然后,我们将从该类创建一个对象,并将 ID 属性的值设置为“1”,将 Name 属性的值设置为“.Net”。
- 然后,我们将使用序列化将上述对象序列化到名为 Example.txt 的文件中。
- 最后,我们将使用反序列化从文件中反序列化该对象,并在控制台中显示这些值。
在控制台应用程序的 program.cs 文件中输入以下代码。
步骤 1) 添加类。
第一步是添加将用于序列化的类。
代码解释:
- 需要序列化的类必须具有 [Serializable] 属性。这是 C# 中的一个关键字。然后将此关键字附加到 Tutorial 类。如果未指定此属性,则在尝试序列化类时会出错。
- 接下来是将被序列化的类的定义。这里我们定义了一个名为“Tutorial”的类,并提供了两个属性,一个是“ID”,另一个是“Name”。
步骤 2) 创建对象。
在此步骤中,我们将首先创建 Tutorial 类的对象并将其序列化到名为 Example.txt 的文件中。
代码解释:
- 首先,我们创建 Tutorial 类的对象。然后我们将 ID 设置为“1”,将 Name 设置为“.net”。
- 然后,我们使用 formatter 类,该类用于将对象序列化或转换为二进制格式。序列化文件中的数据是以二进制格式进行的。接下来,我们创建一个文件流对象。文件流对象用于打开 Example.txt 文件以供写入。使用 FileMode.Create 和 FileMode.Write 关键字来专门指明文件应打开以供写入。
- 最后,我们使用 Serialize 方法将二进制数据传输到文件。然后关闭流,因为写入 操作已完成。
步骤 3) 使用反序列化。
最后,为了确保数据存在于文件中,我们使用反序列化从文件中反序列化对象。
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(); } } }
代码解释:
- 我们创建“stream”对象以只读模式打开 Example.txt 文件。
- 然后,我们使用 formatter 类来反序列化存储在 Example.txt 文件中的对象。返回的对象被设置为 objnew 对象。
- 最后,我们使用“ID”和“name”属性将“objnew”对象的属性显示到控制台。
设置以上代码并在 Visual Studio 中运行项目后,您将看到以下输出。
输出:-
从上面的输出可以看到,文件中的值已正确反序列化并在控制台中显示。
摘要
序列化用于将类对象写入文件。
反序列化用于从文件中恢复对象。