Unity - 커스텀 Class 내부의 Dictionary 를 Json으로 저장

2023. 7. 5. 17:58유니티/기능

Json 저장 방식에 추가로 알아보던 중 어느 한 분의 글을 보았습니다.

 

원문 : https://velog.io/@kohyeonseo1006/Unity-Dictionary를-Json-데이터로-파싱하기

 

(Unity) Dictionary를 Json 데이터로 파싱하기!

Dictionary를 Json 데이터로 파싱하기 놀랍게도 Dictionary형식은 Json 데이터로 파싱이 안된다!! 그렇기에 한번 데이터를 후처리 후 파싱을 시켜야한다. 데이터를 Dictionary로 저장 후 JsonUtility로 ToJson하

velog.io

 

내용을 요약하면 다음과 같습니다.

1. JsonUtility 는 Dictionary를 파싱할 수 없다.

2. Dictionary 를 파싱하기 위해서는 따로 후처리를 해야한다.

 

사실 본 직후에는 후처리를 한다는게 이해가 안가더군요.

후처리라 하기에는 그저 클래스 데이터를 복사하고 옮겨 담은 뒤

Json 으로 변환 한 것 뿐이니 말이죠.

 

직접 실행해본 뒤에는 정말로 그게 다라는 것을 깨달았습니다.

 


우선 원문 코드 내용을 먼저 실험해 보았습니다.

(코드에 결과가 스포 되있는 건 안비밀)

 

원문에서 작성한 코드 사용 시 데이터가 파싱되는 것을 볼 수 있습니다.

반면, JsonUtility 를 사용한 코드는 제대로 출력이 안되고 있습니다.

 

이걸 응용해 제가 원하는 게임에서 사용할 코드를 작성해보겠습니다.

 


우선 커스텀 클래스를 만들었습니다.

덤으로 각종 자료형의 저장 확인을 위해 추가로 변수도 종류별로 넣었습니다.

 

클래스 변수 중 마지막에 있는 dic 변수는 비교 확인을 위해 넣었습니다.

 

 

세이브는 이번에 새로 만든 코드를 사용해 보았습니다.

https://dyunace.tistory.com/29

 

Unity - 세이브 로드 매니저 (개인용)

이번에 새로 개인용 라이브러리 패키지를 만들고 있는 중입니다. 그 중에서 하나인 세이브 로드 매니저를 공유하려고 합니다. 이거 집어넣고, 한 줄만 작성해도 세이브랑 로드가 되니까 편하더

dyunace.tistory.com

 

 

이제 코드를 실행시켜보겠습니다.

 

파일을 확인해 보면 다음과 같습니다.

리스트는 원래부터 잘 되었고, 직접 만든 TestSaveDic 타입 또한 제대로 적용이 되었습니다.

비교를 위해 넣었던 Dictionary는 역시 저장되지 않았습니다.

 

테스트 세이브 딕셔너리가 기존의 Dictionary 처럼 여러 데이터가 들어가는지

확인해 보았습니다.

 


결론을 내리면

" 커스텀 클래스로 Dictionary 형태를 만들어서 사용하면 쓸 수 있다. "

이렇게 되겠네요.