C#의 역직렬화

王林
풀어 주다: 2024-09-03 15:25:14
원래의
487명이 탐색했습니다.

다음 문서에서는 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#에서 역직렬화는 어떻게 작동하나요?

C#에서 역직렬화하려면 먼저 코드에서 System.IO 네임스페이스를 가져와 개체를 재구성하는 데 사용할 데이터가 포함된 파일을 열어야 합니다. 그런 다음 개체 직렬화 및 역직렬화를 담당하는 BinaryFormatter 클래스를 사용하려면 System.Runtime.Serialization.Formatters.Binary 네임스페이스를 가져와야 합니다.

'Name'과 'RollNo'라는 두 가지 속성을 가진 'Student'라는 클래스가 있다고 가정해 보겠습니다. 직렬화 프로세스를 사용하여 클래스 '학생' 데이터 속성을 파일에 작성합니다. 그런 다음 BinaryFormatter 클래스의 Deserialize() 메서드를 호출하여 해당 파일에서 데이터를 읽고 'Student' 클래스의 객체를 재구성할 수 있습니다. 이를 객체의 역직렬화라고 합니다.

BinaryFormatter를 사용하여 C#에서 개체를 역직렬화하는 단계는 다음과 같습니다.

  • 먼저 직렬화된 정보나 데이터를 읽으려면 스트림 객체를 생성해야 합니다.
  • 그런 다음 BinaryFormatter 클래스의 객체를 생성하겠습니다.
  • 그런 다음 BinaryFormatter 클래스의 Deserialize() 메서드를 호출하여 객체를 역직렬화하겠습니다. 이 메소드는 적절한 유형으로 캐스팅할 수 있는 객체를 반환합니다.

C#에는 세 가지 유형의 직렬화가 있습니다.

  • 바이너리 직렬화
  • XML 직렬화
  • JSON 직렬화

따라서 완료된 직렬화에 따라 세 가지 방법으로 객체를 역직렬화할 수 있습니다. 바이너리 직렬화 및 역직렬화를 위해 위에서 설명한 것처럼 BinaryFormatter 클래스를 사용합니다. XML 직렬화 및 역직렬화를 위해 XMLSerializer 클래스를 사용합니다. JSON 직렬화 및 역직렬화를 위해 JsonSerializer 클래스를 사용합니다.

C#의 직렬화 및 역직렬화를 그림으로 표현:

 

C#의 역직렬화

C#의 역직렬화 예

다음은 예시입니다.

예시 #1

바이너리 직렬화 및 역직렬화를 보여주는 예

코드:

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>
로그인 후 복사

출력:

C#의 역직렬화

예시 #2

사용자 정의 클래스의 바이너리 직렬화 및 역직렬화를 보여주는 예

코드:

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();
}
}
}
로그인 후 복사

출력:

C#의 역직렬화

예시 #3

사용자 정의 클래스의 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();
}
}
}
로그인 후 복사

출력:

C#의 역직렬화

결론

역직렬화는 이전에 직렬화된 바이트 시퀀스에서 객체를 재구성하는 프로세스입니다. 이를 통해 필요할 때마다 개체를 복구할 수 있습니다. 직렬화의 역과정이다. BinaryFormatter 클래스의 Deserialize() 메서드는 바이너리 스트림의 역직렬화에 사용됩니다.

위 내용은 C#의 역직렬화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿