📌 개요
데이터가 직렬화 되지 않는 문제
해결책
① 사용자 정의 클래스에 [Serializable] 속성을 추가했는지 체크
② Dictionary 혹은 HashSet을 사용했는지 체크
③ Getter/Setter 프로퍼티를 사용했는지 체크
📌 문제 분석
최근에 유저 데이터를 로컬에 저장하는 기능을 구현해봤습니다.
직렬화하여 Json 파일로 데이터를 저장하고 관리하는 작업이었어요.
이미 많이 구현해본 작업이라 빠르게 작업하고 있었는데...
??? 왜 Json 파일에 Equipment 클래스가 보이지 않는거죠?!
분명 [Serializable] 속성을 붙여서 직렬화를 해줬는데?
과연 원인이 무엇이었을까요?
📌 원인 분석 및 해결책
정답은... Getter 프로퍼티가 원인이었습니다!
Getter/Setter 프로퍼티는 직렬화되지 않습니다.
하지만 이대로 끝내긴 아쉬워서 추가로 직렬화할 때 주의할 점을 찾아봤어요.
[ 직렬화 시 주의할 점 ]
- public 필드만 가능
- private/protected 필드는 [SerializeField]를 사용해야 가능
- Getter/Setter 프로퍼티는 불가능
- 사용자 정의 클래스는 [Serializable]을 사용해야 가능
- UnityEngine.Object(e.g., GameObject, Monobehaviour) [Serializable] 없이 사용 가능
- 기본 자료형(int, float, string, array) [Serializable] 없이 사용 가능
- 배열과 List<T>는 기본적으로 직렬화 가능
- Dictionary나 다른 자료 구조는 직렬화 불가능
- 다른 자료 구조를 직렬화 하고 싶다면 Newtonsoft.Json 라이브러리 활용
- 순환 참조하는 클래스는 직렬화 시 오버플로우 발생
주의할 점은 이정도가 있습니다.
다들 직렬화할 때 참고하시기 바랍니다.
'유니티(Unity) > 이슈 도감' 카테고리의 다른 글
[Unity 이슈] InitializeOnLoad 주의 사항 (0) | 2024.12.23 |
---|---|
[Unity 이슈] 커스텀 패키지 Addressable 이슈 (1) | 2024.12.22 |
[Unity 이슈] 커스텀 패키지 종속성 문제 (1) | 2024.12.21 |
[Unity] SpriteAtlas GetSprite 함수가 동작하지 않는 문제 (0) | 2024.12.04 |
[Unity] 마우스 좌표와 월드 좌표 변환 주의 사항 (2) | 2024.12.04 |