스토리지

json으로 직렬화할 때 문제점 본문

Unity/문제해결

json으로 직렬화할 때 문제점

ljw4104 2021. 3. 26. 09:41
QuestInfo info = new QuestInfo();
info.id = questId;
info.count = count;
var json = JsonConvert.SerializeObject(questInfos);
File.WriteAllText("./quest_info.json", json);

이러한 방식으로 저장한다고 하면 json 파일 안에는

{"id"=questId, "count"=count}로 저장된다. 즉 배열이 아닌 객체로 저장이된다.

 

근데 우리가 부르는 코드는 

var arr = JsonConvert.DeserializeObject<T[]>(json);
dicDatas = arr.ToDictionary(x => x.id);

즉 배열로 불러온다. 그런데 위의 코드는 객체로 저장을 했다. 객체와 배열은 서로 호환이 되지 않기에 arr이란 변수에 역직렬화된 값이 들어갈 수가 없다. 이러면 무조건 Newtonsoft.Json 형식의 에러를 발생시키게 된다.

 

 

∴ 저장할 때 배열로 저장하면 이 문제를 해결할 수 있다.

QuestInfo info = new QuestInfo();
info.id = questId;
info.count = count;
questInfos.Add(info);

QuestInfo temp = new QuestInfo();
temp.id = 2000;
temp.count = 0;
questInfos.Add(temp);

var json = JsonConvert.SerializeObject(questInfos);
File.WriteAllText("./quest_info.json", json);

(questInfos는 List<QuestInfo>형식이다.

이런식으로 json에 저장하면 [{~~~},{~~~}] 식으로, 즉 배열로 저장이된다.

json은 c#에서 List형식을 지원하기에 이런방식으로 저장하는게 제일 좋은거같다.

Comments