필자가 21살에 C# 네트워크 전공 시간에 자체 프로토콜을 만들어 멀티 보드 게임을 만들게 되면서 처음으로 접한 지식이다. 기술적인 내용일 경우에 지피티가 작성해주는 것이 훨-씬 가독성이 좋다는 것을 알게됐다.. 슬프다.

필자가 넣은 프롬프트인데, 주소 번지대로 복원하는 것은 C++ 방식이라고 한다. C#은 보안을 강화하고자 메모리 구조가 아닌 필드별 데이터를 대응시켜 객체를 새로 생성하는 방식이라고 한다...!
"객체 → 저장하거나 전송 가능한 데이터 형태로 변환"
"데이터 → 객체로 복원"
var json = JsonConvert.SerializeObject(myObj);
var obj = JsonConvert.DeserializeObject<MyClass>(json);
| 항목 | 직렬화 가능 여부 |
|---|---|
| 기본 타입 (int, float, string 등) | ✅ 가능 |
[Serializable] 클래스 | ✅ 가능 (필드에 public 또는 [SerializeField] 필요) |
| Dictionary, delegate, static 등 | ❌ 불가 |
| 방법 | 설명 |
|---|---|
BinaryFormatter | ✅ 오래된 방식. 보안 취약점으로 인해 현재는 비권장 |
JsonUtility | ✅ Unity 내장, 속도 빠름. 기능은 제한적 |
Newtonsoft.Json (Json.NET) | ✅ 가장 범용적. Dictionary, enum, nested 객체 모두 지원 |
System.Text.Json | ✅ .NET Core 이후 공식 지원. Unity에서는 일부 제한 있음 |
| 항목 | JsonUtility | Newtonsoft.Json |
|---|---|---|
| Dictionary 지원 | ❌ 불가 | ✅ 가능 |
| 중첩 객체 직렬화 | 제한적 | 매우 유연 |
| 성능 | 빠름 (C++ 기반) | 느림 (리플렉션 기반) |
| enum 표현 방식 | 정수 (int) | 문자열 또는 정수 모두 가능 |
툴 개발에서는 보통 Newtonsoft.Json을 권장합니다.
| 항목 | 설명 |
|---|---|
| 참조 순환 (Cyclic Reference) | 무한 루프 발생 가능. 감지 및 방지 설정 필요 |
| 구조 변경 시 호환성 문제 | 필드 추가/삭제 시 역직렬화 오류 발생 가능 |
| Unity 전용 제한 | static, delegate, Dictionary 등 직렬화 불가 |
| JsonUtility는 기능 제한 | enum 문자열 표현, 커스텀 포맷 지정 불가 |
| 질문 | 답변 요령 |
|---|---|
| Unity에서 Dictionary를 JSON으로 저장할 수 있나요? | JsonUtility는 불가, Newtonsoft.Json 사용 필요 |
| 구조체(struct)는 직렬화 가능한가요? | 참조형 필드가 없으면 가능. 복잡한 경우 class 추천 |
| 직렬화된 JSON의 버전을 바꿀 수 있나요? | version 필드를 직접 두고 분기 처리 필요 |
| 성능 이슈가 있다면? | 바이너리 포맷, 압축(JSON → GZip) 고려 |
글에서 GPT향기가 스멀스멀 나네요?