C#中的序列化和反序列化示例
C#中的序列化和反序列化
每当与对象有关的数据必须从一个应用程序发送到另一个应用程序时,就会使用序列化和反序列化的概念。序列化用于将应用程序数据导出到文件中。然后目标应用程序使用反序列化从应用程序中提取数据以供进一步使用。
序列化是一个概念,其中 C# 类对象被写入或序列化到文件中。假设您有一个名为 Tutorial 的 C# 类。该类有ID和Tutorials名称2个属性。
序列化可用于将 Tutorial 类的数据属性直接写入文件。反序列化用于从文件中读取数据,重新构造Tutorial对象。
如何在 C# 中序列化对象
让我们看一个如何实现这一目标的示例。
在我们的示例中,我们将在代码中执行以下高级步骤
- 创建一个名为 Tutorial 的类,它有 2 个属性,即 ID 和 Name
- 然后,我们将从类中创建一个对象,并将值“1”分配给 ID 属性,将值“.Net”分配给 name 属性。
- 然后我们将使用序列化将上述对象序列化为一个名为 Example.txt 的文件
- 最后,我们将使用反序列化从文件中反序列化对象并在控制台中显示值。
在控制台应用程序的 program.cs 文件中输入以下代码。
步骤 1) 添加类。
第一步是添加将用于序列化的类
代码说明:-
- 需要序列化的类需要有[Serializable]属性。这是 C# 中的关键字。然后将此关键字附加到 Tutorial 类。如果不提这个属性,你在尝试序列化类的时候会报错。
- 接下来是要序列化的类的定义。在这里,我们定义了一个名为“Tutorial”的类,并提供了 2 个属性,一个是“ID”,另一个是“Name”。
步骤 2) 创建对象。
在这一步中,首先我们将创建Tutorial类的对象并将其序列化到名为Example.txt的文件中
代码说明:-
- 首先,我们创建一个 Tutorial 类的对象。然后我们将值“1”分配给 ID,将“.net”分配给 name 属性。
- 然后我们使用格式化程序类将对象序列化或转换为二进制格式。序列化文件中的数据以二进制格式完成。接下来,我们创建一个文件流对象。文件流对象用于打开文件 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。
- 然后我们使用用于反序列化对象的格式化程序类,该对象存储在 Example.txt 文件中。返回的对象设置为对象 objnew。
- 最后,我们使用“ID”和“name”属性将“objnew”对象的属性显示到控制台。
当上面的代码设置好后,使用 Visual Studio 运行项目,你会得到下面的输出。
输出:-
从上面的输出可以看出,文件中的值被正确反序列化并显示在控制台中。
总结
序列化用于将类对象写入文件。
反序列化用于从文件中恢复对象。
C语言