C#/수업내용

0326 쿠키런 직렬화/역직렬화

피주빈 2021. 3. 26. 14:33
public class App
    {
        public App() 
        {
            GameInfo gameInfo = null;
            string dataPath = "./cookie_data.json";
            string infoPath = "./game_info.json";

            //json 파일 읽기
            string json = File.ReadAllText(dataPath);
            Console.WriteLine(json);

            //역직렬화
            CookieData[] cookies = JsonConvert.DeserializeObject<CookieData[]>(json);

            //사전에 넣기
            Dictionary<int, CookieData> dicCookies = cookies.ToDictionary(x => x.id);

            //파일이 있는지 검사 (신규 유저 판별)
            if (File.Exists(infoPath))
            {
                Console.WriteLine("기존 유저");
                //파일 로드
                var loadedGameInfoJson = File.ReadAllText(infoPath);
                //역직렬화
                gameInfo = JsonConvert.DeserializeObject<GameInfo>(loadedGameInfoJson);
                //출력
                CookieInfo cookieInfo = gameInfo.cookieInfos.Find(x => x.isSelected);
                Console.WriteLine("cookieInfo: {0}", cookieInfo);
            }
            else 
            {
                Console.WriteLine("신규 유저");
                gameInfo = new GameInfo();
                foreach ( var pair in dicCookies) 
                {
                    var cookieData = pair.Value;
                    if (cookieData.is_default) 
                    {
                        var cookieInfo = new CookieInfo(cookieData.id, cookieData.level, true);
                        gameInfo.cookieInfos.Add(cookieInfo);
                    }
                }
                //직렬화 후 저장
                File.WriteAllText(infoPath, JsonConvert.SerializeObject(gameInfo));
                Console.WriteLine("game_info저장 완료");
            }
        }
    }
public class GameInfo
    {
        public List<CookieInfo> cookieInfos;
        public GameInfo() 
        {
            this.cookieInfos = new List<CookieInfo>();
        }
    }
public class CookieInfo
    {
        public int id;
        public int level;
        public bool isSelected;
        public CookieInfo(int id, int level, bool isSelected = false) 
        {
            this.id = id;
            this.level = level;
            this.isSelected = isSelected;
        }
    }
public class CookieData
    {
        public int id;
        public string name;
        public int grade;
        public int level;
        public int max_hp;
        public string skill_name;
        public bool is_default;
    }

cookie_data.json
0.00MB
game_info.json
0.00MB