0326 쿠키런 직렬화/역직렬화
2021. 3. 26. 14:33ㆍC#/수업내용
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;
}
'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 |