[c#] C#에서의 직렬화와 역직렬화

C#에서 직렬화(serialization)는 객체의 상태를 저장하거나 네트워크를 통해 전송할 수 있도록 바이트 스트림으로 변환하는 과정을 의미합니다. 역직렬화(deserialization)는 이진 데이터를 다시 객체로 변환하는 반대 과정을 말합니다. C#에서 객체 직렬화를 위해서는 System.Runtime.Serialization 네임스페이스를 사용할 수 있습니다.

1. 직렬화(Serialization)

C#에서 객체를 직렬화하기 위해서는 Serialize 메소드를 사용합니다. 아래는 Serialize 메소드를 사용하여 FileStream을 이용해 직렬화하는 간단한 예제입니다.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
class Person
{
    public string Name;
    public int Age;
}

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("person.dat", FileMode.Create))
        {
            formatter.Serialize(stream, person);
        }
    }
}

위의 코드는 Person 클래스를 Serializable로 표시하고 BinaryFormatter를 사용하여 객체를 직렬화한 후, 이를 파일에 저장하는 예제입니다.

2. 역직렬화(Deserialization)

역직렬화를 위해서는 Deserialize 메소드를 사용합니다. 다음은 위에서 직렬화한 파일을 역직렬화하는 예제입니다.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

class Program
{
    static void Main()
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("person.dat", FileMode.Open))
        {
            Person person = (Person)formatter.Deserialize(stream);
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
        }
    }
}

위의 코드에서는 BinaryFormatter를 사용하여 파일에서 데이터를 읽은 후, Deserialize 메소드를 호출하여 객체를 역직렬화합니다.

C#에서의 직렬화와 역직렬화는 객체의 상태를 쉽게 저장하고 전송할 수 있는 강력한 기능을 제공합니다.

위의 예제는 C# 7.0 이상에서 실행됩니다.

참고 문헌: Microsoft Docs