[c#] C#에서의 직렬화 라이브러리

C#에서 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해서는 데이터를 직렬화해야 합니다. C#에는 다양한 직렬화 라이브러리가 있으며, 이에 대해 알아보겠습니다.

1. .NET 직렬화 (.NET Serialization)

.NET 프레임워크에는 System.Runtime.Serialization 네임스페이스가 포함되어 있어, 이를 사용하여 객체를 직렬화할 수 있습니다. 예를 들어, BinaryFormatter 클래스를 이용하여 이진 형식으로 데이터를 저장하고 복원할 수 있습니다.

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

public class Program
{
    static void Main()
    {
        // 객체 직렬화
        MemoryStream stream = new MemoryStream();
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream, new MyClass());

        // 객체 복원
        stream.Position = 0;
        var obj = (MyClass)formatter.Deserialize(stream);
    }
}

[Serializable]
public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2. JSON.NET (Newtonsoft.Json)

JSON.NET은 C#에서 JSON 데이터 형식을 처리하는 강력하고 유연한 라이브러리입니다. 객체를 JSON 문자열로 직렬화하거나 JSON 문자열을 다시 객체로 역직렬화할 수 있습니다.

using Newtonsoft.Json;

public class Program
{
    static void Main()
    {
        // 객체 직렬화
        string json = JsonConvert.SerializeObject(new MyClass());

        // 객체 복원
        var obj = JsonConvert.DeserializeObject<MyClass>(json);
    }
}

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

3. Protobuf-net

Protobuf-net은 Google Protocol Buffers의 C# 구현체로, 효율적이고 컴팩트한 이진 직렬화를 제공합니다.

using ProtoBuf;

[ProtoContract]
public class MyClass
{
    [ProtoMember(1)]
    public int Id { get; set; }
    [ProtoMember(2)]
    public string Name { get; set; }
}

public class Program
{
    static void Main()
    {
        // 객체 직렬화
        using (var file = File.Create("data.bin"))
        {
            Serializer.Serialize(file, new MyClass());
        }

        // 객체 복원
        using (var file = File.OpenRead("data.bin"))
        {
            var obj = Serializer.Deserialize<MyClass>(file);
        }
    }
}

이러한 라이브러리들은 각각의 특징을 가지고 있으며, 프로젝트의 요구 사항에 따라 적합한 라이브러리를 선택하여 사용할 수 있습니다.