다음 문서에서는 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 네임스페이스 아래에 있는 클래스이며 개체를 직렬화 및 역직렬화하는 데 사용됩니다. 그런 다음 FileStream의 객체를 입력으로 사용하고 ClassName 유형의 객체로 변환한 다음 이를 objectName에 저장하는 객체를 반환하는 BinaryFormatter의 Deserialize() 메서드를 사용하여 객체를 역직렬화했습니다.
C#에서 역직렬화하려면 먼저 코드에서 System.IO 네임스페이스를 가져와 개체를 재구성하는 데 사용할 데이터가 포함된 파일을 열어야 합니다. 그런 다음 개체 직렬화 및 역직렬화를 담당하는 BinaryFormatter 클래스를 사용하려면 System.Runtime.Serialization.Formatters.Binary 네임스페이스를 가져와야 합니다.
'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!