以下文章提供了 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中文網其他相關文章!