[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);
}
}
}
이러한 라이브러리들은 각각의 특징을 가지고 있으며, 프로젝트의 요구 사항에 따라 적합한 라이브러리를 선택하여 사용할 수 있습니다.