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

2021. 3. 26. 14:33C#/수업내용

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

'C# > 수업내용' 카테고리의 다른 글

0329 Task/async/await  (0) 2021.03.29
0326 스레드  (0) 2021.03.26
0325 싱글턴 패턴  (0) 2021.03.25
0324 File 클래스 (외부 파일 불러오기)  (0) 2021.03.24
0324 복습  (0) 2021.03.24