以下文章提供了 C# 中反序列化的概述。我们先来看看序列化的过程。序列化是将对象转换为某种形式的过程,以便可以将其写入流中并存储在内存、数据库或文件中。它的主要用途是存储对象的状态。
现在,反序列化是与序列化相反的过程。它是将字节流读取或转换回对象以便将其加载到内存中的过程。这个过程使我们能够在需要时重建对象。
语法及解释:
使用BinaryFormatter进行反序列化的语法如下:
FileStream fileStream = new FileStream(filePath, FileMode.Open); BinaryFormatter binaryFormatter = new BinaryFormatter(); ClassName objectName = (ClassName)binaryformatter.Deserialize(fileStream);
在上面的语法中,首先,我们通过给出文件路径(filePath)创建了一个 FileStream(fileStream)对象,我们将从中获取信息以重建对象。之后,我们创建了一个 BinaryFormatter 对象。 BinaryFormatter 是 System.Runtime.Serialization.Formatters.Binary 命名空间下的一个类,用于序列化和反序列化对象。然后,我们使用 BinaryFormatter 的 Deserialize() 方法反序列化该对象,该方法以 FileStream 对象作为输入并返回一个对象,我们将其转换为 ClassName 类型的对象,然后将其存储在 objectName 中。
对于 C# 中的反序列化,我们需要首先在代码中导入 System.IO 命名空间,以打开包含将用于重建对象的数据的文件。然后我们需要导入 System.Runtime.Serialization.Formatters.Binary 命名空间来使用 BinaryFormatter 类,该类将负责序列化和反序列化对象。
假设我们有一个名为“Student”的类,它有两个属性,即“Name”和“RollNo”。我们将使用序列化过程将类“Student”数据属性写入文件。然后通过调用 BinaryFormatter 类的 Deserialize() 方法,我们可以从该文件中读取数据并重建“Student”类的对象,我们称之为对象的反序列化。
使用 BinaryFormatter 在 C# 中反序列化对象的步骤如下:
在 C# 中,序列化分为三种类型:
因此,根据序列化完成的情况,我们可以通过三种方式反序列化对象。对于二进制序列化和反序列化,我们使用上面讨论的 BinaryFormatter 类;对于 XML 序列化和反序列化,我们使用 XMLSerializer 类;对于 JSON 序列化和反序列化,我们使用 JsonSerializer 类。
C# 中序列化和反序列化的图示:
以下是示例:
显示二进制序列化和反序列化的示例。
代码:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace ConsoleApp4 { class Program { public static void SerializingData() { string str = "Hello world!"; FileStream fileStream = new FileStream(@"E:\Content\content.txt", FileMode.Create); BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(fileStream, str); fileStream.Close(); } public static void DeserializingData() { FileStream fileStream = new FileStream(@"E:\Content\content.txt", FileMode.Open); BinaryFormatter binaryFormatter = new BinaryFormatter(); string content = ""; content = (string)binaryFormatter.Deserialize(fileStream); fileStream.Close(); Console.WriteLine("Deserialized data: "); Console.WriteLine(content); } static void Main(string[] args) { SerializingData(); DeserializingData(); Console.ReadLine(); } } }<strong> </strong>
输出:
显示自定义类的二进制序列化和反序列化的示例。
代码:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace ConsoleApp4 { [Serializable] public class Student { public int RollNo; public string Name; public string Address; public Student(int rollNo, string name, string address) { RollNo = rollNo; Name = name; Address = address; } } public class Program { public static void SerializingData() { Student student = new Student(1, "Sneha", "Kasarwadi, Pune"); //creating file to store data FileStream fileStream = new FileStream(@"E:\Content\Student.txt", FileMode.Create); BinaryFormatter binaryFormatter = new BinaryFormatter(); //serializing data using Serialize() method binaryFormatter.Serialize(fileStream, student); fileStream.Close(); } public static void DeserializingData() { Student student; //opening file to read data FileStream fileStream = new FileStream(@"E:\Content\Student.txt", FileMode.Open); BinaryFormatter binaryFormatter = new BinaryFormatter(); //creating object to store deserialized data student = (Student)binaryFormatter.Deserialize(fileStream); int rollNo = student.RollNo; string name = student.Name; string address = student.Address; fileStream.Close(); //displaying deserialized data Console.WriteLine("Deserialized data: "); Console.WriteLine("Roll No = " + rollNo); Console.WriteLine("Student Name = " + name); Console.WriteLine("Student Address = " + address); } public static void Main(string[] args) { SerializingData(); DeserializingData(); Console.ReadLine(); } } }
输出:
显示自定义类的 XML 序列化和反序列化的示例。
代码:
using System; using System.IO; using System.Xml.Serialization; namespace ConsoleApp4 { [Serializable] public class Student { public int RollNo { get; set; } public string Name { get; set; } public string Address { get; set; } public Student() { RollNo = 0; Name = "N/A"; Address = "N/A"; } } public class Program { public static void SerializingData(Student student) { //creating file to store data. FileStream fileStream = new FileStream(@"E:\Content\Student.txt", FileMode.Create); XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student)); //calling serialize() method to serialize data to file xmlSerializer.Serialize(fileStream, student); fileStream.Close(); } public static void DeserializingData() { //opening file to read data FileStream fileStream = new FileStream(@"E:\Content\Student.txt", FileMode.Open); XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student)) //calling Deserialize() to deserialize data from the file Student student = (Student)xmlSerializer.Deserialize(fileStream); fileStream.Close(); Console.WriteLine("Deserialized data: "); Console.WriteLine("Student Roll No = " + student.RollNo); Console.WriteLine("Student Name = " + student.Name); Console.WriteLine("Student Address = " + student.Address); } public static void Main(string[] args) { Student student = new Student(); Console.WriteLine("Enter student Roll No"); student.RollNo = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter student name"); student.Name = Console.ReadLine(); Console.WriteLine("Enter student address"); student.Address = Console.ReadLine(); SerializingData(student); DeserializingData(); Console.ReadLine(); } } }
输出:
反序列化是从先前序列化的字节序列重建对象的过程。它允许我们在需要时恢复对象。这是序列化的逆过程。 BinaryFormatter 类的 Deserialize() 方法用于从二进制流进行反序列化。
以上是C# 中的反序列化的详细内容。更多信息请关注PHP中文网其他相关文章!