C# 직렬화 & 역직렬화 실전 예제: 객체 상태 파일 저장 및 복원
C#에서 직렬화(Serialization) & 역직렬화(Deserialization)
객체 데이터가 애플리케이션 간에 이동하거나 세션 간에 지속되어야 할 때 직렬화와 역직렬화는 필수적입니다. C#에서 직렬화는 객체 상태를 저장 매체(일반적으로 파일)에 쓰는 것이고, 역직렬화는 저장된 표현에서 객체를 재구성하는 것입니다.
ID와 Name 두 속성을 가진 간단한 Tutorial 클래스를 고려해 보세요. 이 클래스 인스턴스를 파일에 직렬화하면 나중에 파일을 읽어 원래 데이터가 그대로인 동일한 객체를 재생성할 수 있습니다.
C#에서 객체 직렬화하는 방법
아래는 콘솔 애플리케이션에서 이 과정을 시연하는 단계별 안내입니다.
ID와 Name 속성을 가진 Tutorial 클래스 생성
- 클래스 인스턴스화,
ID = 1, Name = ".Net" 할당
- 객체를
Example.txt 파일에 직렬화
- 파일에서 객체 역직렬화 후 콘솔에 값 표시
다음 코드를 Program.cs 파일에 붙여넣으세요.
1단계) 클래스 추가. 직렬화될 클래스를 먼저 추가합니다.

코드 설명:
- 클래스에
[Serializable] 특성 표시 필수; 그렇지 않으면 직렬화 실패
int ID, string Name 두 필드로 Tutorial 클래스 정의
2단계) 객체 생성 및 직렬화. 이 단계에서 Tutorial 객체 인스턴스화 후 Example.txt에 씁니다.

코드 설명:
Tutorial 인스턴스 생성, ID = 1, Name = ".Net" 설정
BinaryFormatter 인스턴스화 (참고: .NET 5+에서 BinaryFormatter는 구식, 프로덕션 코드에서는 System.Text.Json 또는 XmlSerializer 권장)
FileMode.Create, FileAccess.Write로 FileStream 오픈하여 바이너리 데이터 쓰기
formatter.Serialize 호출로 객체를 스트림에 쓰고 스트림 닫기
3단계) 객체 역직렬화. 마지막으로 파일에서 데이터를 읽어 과정을 검증합니다.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace DemoApplication {
[Serializable]
class Tutorial {
public int ID;
public string Name;
static void Main(string[] args) {
Tutorial obj = new Tutorial();
obj.ID = 1;
obj.Name = ".Net";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("E:\\ExampleNew.txt", FileMode.Create, FileAccess.Write);
formatter.Serialize(stream, obj);
stream.Close();
stream = new FileStream("E:\\ExampleNew.txt", FileMode.Open, FileAccess.Read);
Tutorial objnew = (Tutorial)formatter.Deserialize(stream);
Console.WriteLine(objnew.ID);
Console.WriteLine(objnew.Name);
Console.ReadKey();
}
}
}
코드 설명:
- 읽기 모드로 파일 오픈
- 바이너리 데이터를
Tutorial 인스턴스로 역직렬화
ID와 Name을 콘솔에 출력
Visual Studio에서 프로그램 실행 시 다음 출력:
출력:

보시는 바와 같이 값이 파일에서 올바르게 검색되었습니다.
요약
직렬화는 객체 데이터를 파일에 쓰고, 역직렬화는 그 데이터를 다시 객체로 읽어옵니다. 이 기본 기술은 많은 .NET 데이터 교환 시나리오의 근간이 됩니다.