Written on
·
438
1
JsonUtility.FromJson()의 Parsing에 관한 부분을 잘 모르는것 같습니다
GameScene.cs에서
Dictionary<int, Stat> dict = Managers.Data.StatDict;
이렇게 하는 부분을 역추적해서 이해하려 했습니다
저 코드가 실행되는 과정의 초반부에서 이해가 안가는게
DataManager.cs에서
StatDict가 선언
Init에서
LoadJson<StatData, int, Stat>("StatData")을 통해서 Json 파일의 내용이 StatData 클래스에 맞게 로드
TextAsset textAsset = Managers.Resource.Load<TextAsset>($"Data/{path}"); 이 부분에서 파일을 불러오고,
return JsonUtility.FromJson<Loader>(textAsset.text); 이 부분에서 파일의 내용을 string 형태로 읽어서 그걸 StatData에 맞춰서 내보내는거 같은데
바로 이 부분이 텅 비어버린거 같아요
그냥 저 코드를 실행하니까
StatData 클래스에 있는 public List<Stat> stats = new List<Stat>(); 이 리스트가 채워져있다 느낌이거든요
혹시 이 부분에 관해서 추가 설명을 해주실 수 있으신가요?>
Answer 1
1
JsonUtility.FromJson<Loader>(textAsset.text);
부분은 굉장히 특이한 부분인데
이게 결국 C#의 Reflection을 활용한 것입니다.
FromJson<??>에서 ?? 부분에 우리가 만들길 원하는 클래스 타입을 넣어주고
그것을 textAsset.text (string)을 이용해 채워주고 있는데요.
json 구조와 class 변수 이름을 동일하게 맞춰주면 알아서 뿅! 채워주는 마법이 일어나고 있습니다.
내부적으로는 넣어준 ?? 클래스를 X-Ray 찍듯 분석해서,
각 변수들 이름을 체크하고, 동일한 이름의 정보가 json에도 있는지를 찾아서 데이터를 매핑해주고 있는 것입니다.
예전에 제가 일했던 C++ 프로젝트에서는
데이터 (json, xml) 파일을 한줄 한줄 긁어서 직접 손으로
class 인스턴스의 멤버 변수 값을 설정했었습니다.
그에 비하면 C#은 참 편리하죠.