Unity에서 JSON사용

A Code AM·2020년 6월 8일
0

XML보다 JSON이 나은 이유
: XML은 가독성이 매우 떨어지고 데이터 넣거나 꺼내기 위해 파싱(Parsing)하는 과정이 까다로움.
반면 JSON은 가독성이 좋고 직렬화(Serialize)와 비직렬화(Deserialize) 함수를 통해 데이터에서 JSON데이터로, JSON데이터에서 데이터로 편하게 변환 가능

유니티에 내장된 JSonUtility를 사용하면 딕셔너리에 대한 시리얼라이즈, 디시리얼라이즈를 지원하지 않음 (ToJson, FromJson형식 사용) 딕셔너리를 JSON으로 다루려면 Newtonsoft나 다른 JSON라이브러리 사용하거나 이에 대한 기능 직접 구현해야 함

Newtonsoft의 JSON 사용시 using Newtonsoft.Json 네임스페이스를 추가하고 JsonConvert.SerializeObject로 데이터를 전송하고 JsonConvert.DeserializeObject를 사용해서 데이터 받아옴

Newtonsoft의 JSON라이브러리는 Monobehaviour를 상속받는 클래스의 오브젝트를 serialize하는 대신 스크힙트가 가지고 있는 프로퍼티를 클래스로 묶어서 해당클래스만 시리얼라이즈 하거나 JsonUtility 사용해서 시리얼라이즈 하는거 추천

Vector3를 시리얼라이즈 하려고 하면 Self referencing loop문제(gameObject에서 gameObject 호출할 수 있는 순환구조 때문에 생김)가 발생. 이것은 Vector3의 프로퍼티인 normalized에서 다시 normalized를 호출할 수 있기 때문에 발생하는 문제
( => JsonSerializerSetting 만들어서 ReferenceLoopHandling을 Ignore로 설정하고 시리얼라이즈 해야함 => 그러나 normalized벡터나 벡터의 길이 등의 불필요한 값들이 시리얼라이즈 돼서 불필요하게 JSON데이터 길이가 늘어나는 문제가 발생한다.)
=> 외부 라이브러리 이용해서 Vector3중에서 x, y, z 좌표값만을 JSON데이터로 시리얼라이즈하기를 원한다면 별도의 시리얼라이즈용 Vector클래스 만들어서 시리얼라이즈 해야한다. (간단하게 JsonUtility로 Vector3를 시리얼라이즈 해도 된다)

profile
배움기록

0개의 댓글