곡 이름마다 유저 이름, 점수 를 저장하려고 하였다.
유저 이름과 점수는 하나의 클래스(RankingEntry
)로 묶어두었음.
곡 이름을 키로, RankingEntry
리스트를 밸류로 하여 랭킹 정보를 딕셔너리 데이터로 Json에 저장하고자 하였다.
유니티에서 제공하는 JsonUtility는 딕셔너리 형태의 데이터를 바로 저장하도록 지원하지 않는다..!!
나중에 보니 리스트도 그 상태 그대로 저장하는 것을 지원하지 않더라..
절차는 크게 2단계로 이루어진다.
public class RankingMap
{
public string key;
public List<RankingEntry> value = new List<RankingEntry>();
}
public class RankingMapWrap
{
public List<RankingMap> RankingMapList = new List<RankingMap>();
}
public void SaveRankingMap()
{
string filePath = GetSaveFilePath();
RankingMapWrap rankingMapWrap = new RankingMapWrap();
foreach (var ranking in rankingMap)
{
RankingMap entry = new RankingMap
{
key = ranking.Key,
value = ranking.Value
};
rankingMapWrap.RankingMapList.Add(entry);
}
string jsonData = JsonUtility.ToJson(rankingMapWrap, true);
File.WriteAllText(filePath, jsonData);
}
foreach문 안에서 딕셔너리의 내용을 RankingMap
의 인스턴스에 옮겨준다.
그리고 RankingMapWrap
의 인스턴스의 리스트에 RankingMap
의 인스턴스를 추가해준다.
마무리로 RankingMapWrap
의 인스턴스를 Json으로 변형시켜주면 완벽하게 딕셔너리의 내용이 저장된다.