[c#] C# 직렬화 이해하기
C#에서는 데이터를 파일에 쓰거나 네트워크를 통해 전송하기 위해 직렬화(serialization)라는 개념을 사용합니다. 직렬화는 객체를 일련의 바이트로 변환하여 저장하거나 전송할 수 있도록 하는 프로세스입니다.
직렬화의 이점
데이터 저장 및 전송
직렬화를 통해 객체를 파일에 저장하거나 네트워크를 통해 다른 시스템으로 전송할 수 있습니다.
상속 및 다형성
직렬화를 사용하면 클래스 간의 상속 및 다형성을 유지하면서 객체를 저장하고 전송할 수 있습니다.
데이터 보안
직렬화를 통해 데이터를 암호화하거나 서명하여 보안성을 유지할 수 있습니다.
C#에서의 직렬화 방법
C#에서는 BinaryFormatter, XmlSerializer, DataContractSerializer, JSON.NET(Newtonsoft.Json) 등의 라이브러리를 사용하여 직렬화를 수행할 수 있습니다.
BinaryFormatter
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class Program
{
static void Main()
{
// Serialize
var obj = new SomeClass();
var formatter = new BinaryFormatter();
using (var stream = new FileStream("data.bin", FileMode.Create))
{
formatter.Serialize(stream, obj);
}
// Deserialize
using (var stream = new FileStream("data.bin", FileMode.Open))
{
var deserializedObj = (SomeClass)formatter.Deserialize(stream);
}
}
}
[Serializable]
public class SomeClass
{
public int Id { get; set; }
public string Name { get; set; }
}
XmlSerializer
using System;
using System.IO;
using System.Xml.Serialization;
public class Program
{
static void Main()
{
// Serialize
var obj = new SomeClass();
var serializer = new XmlSerializer(typeof(SomeClass));
using (var stream = new FileStream("data.xml", FileMode.Create))
{
serializer.Serialize(stream, obj);
}
// Deserialize
using (var stream = new FileStream("data.xml", FileMode.Open))
{
var deserializedObj = (SomeClass)serializer.Deserialize(stream);
}
}
}
public class SomeClass
{
public int Id { get; set; }
public string Name { get; set; }
}
DataContractSerializer
using System;
using System.IO;
using System.Runtime.Serialization;
public class Program
{
static void Main()
{
// Serialize
var obj = new SomeClass();
var serializer = new DataContractSerializer(typeof(SomeClass));
using (var writer = XmlWriter.Create("data.xml"))
{
serializer.WriteObject(writer, obj);
}
// Deserialize
using (var stream = new FileStream("data.xml", FileMode.Open))
{
var deserializedObj = (SomeClass)serializer.ReadObject(stream);
}
}
}
[DataContract]
public class SomeClass
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
JSON.NET(Newtonsoft.Json)
using System;
using System.IO;
using Newtonsoft.Json;
public class Program
{
static void Main()
{
// Serialize
var obj = new SomeClass();
var json = JsonConvert.SerializeObject(obj);
File.WriteAllText("data.json", json);
// Deserialize
var deserializedObj = JsonConvert.DeserializeObject<SomeClass>(File.ReadAllText("data.json"));
}
}
public class SomeClass
{
public int Id { get; set; }
public string Name { get; set; }
}
결과
직렬화를 통해 객체를 파일에 저장하거나 네트워크를 통해 전송할 수 있으며, C#에서는 다양한 방법으로 직렬화를 수행할 수 있습니다. 이를 활용하여 데이터 관리와 전송을 보다 효율적으로 처리할 수 있습니다.
참고 자료
- Microsoft Docs. “Serialization (C#)”. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/