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;
}