━━━━ ◇ ━━━━
유니티(Unity)/이슈 도감

[Unity] 직렬화가 되지 않는 문제

📌 개요

 

데이터가 직렬화 되지 않는 문제

 

해결책

① 사용자 정의 클래스에 [Serializable] 속성을 추가했는지 체크

② Dictionary 혹은 HashSet을 사용했는지 체크

③ Getter/Setter 프로퍼티를 사용했는지 체크

 

 

 


📌 문제 분석

직렬화하여 로컬에 저장될 유저 데이터
세이브 함수 코드

 

최근에 유저 데이터를 로컬에 저장하는 기능을 구현해봤습니다.

 

직렬화하여 Json 파일로 데이터를 저장하고 관리하는 작업이었어요.

 

이미 많이 구현해본 작업이라 빠르게 작업하고 있었는데...

 

 

 

 

 

 

??? 왜 Json 파일에 Equipment 클래스가 보이지 않는거죠?!

 

분명 [Serializable] 속성을 붙여서 직렬화를 해줬는데?

 

과연 원인이 무엇이었을까요?

 

 

 


📌 원인 분석 및 해결책

 

 

 

정답은... Getter 프로퍼티가 원인이었습니다!

 

Getter/Setter 프로퍼티는 직렬화되지 않습니다.

 

하지만 이대로 끝내긴 아쉬워서 추가로 직렬화할 때 주의할 점을 찾아봤어요.

 

 

 

[ 직렬화 시 주의할 점 ]

  1. public 필드만 가능
    • private/protected 필드는 [SerializeField]를 사용해야 가능
  2. Getter/Setter 프로퍼티는 불가능
  3. 사용자 정의 클래스는 [Serializable]을 사용해야 가능
    • UnityEngine.Object(e.g., GameObject, Monobehaviour) [Serializable] 없이 사용 가능
    • 기본 자료형(int, float, string, array) [Serializable] 없이 사용 가능
  4. 배열과 List<T>는 기본적으로 직렬화 가능
  5. Dictionary나 다른 자료 구조는 직렬화 불가능
    • 다른 자료 구조를 직렬화 하고 싶다면 Newtonsoft.Json 라이브러리 활용
  6. 순환 참조하는 클래스는 직렬화 시 오버플로우 발생

 

주의할 점은 이정도가 있습니다.

 

다들 직렬화할 때 참고하시기 바랍니다.

 

 

 

COMMENT