
오늘은 json 방식으로 데이터를 저장하는 방법을 공부하고 적용
internal static class SaveSystem
{
private static string savePath = "save.json";
public static void Save(GameData data)
{
string json = JsonConvert.SerializeObject(data, Formatting.Indented); //GameData 클래스 객체에 Json 문자열로 변환 후 json 변수에 담기
File.WriteAllText(savePath, json);
Console.WriteLine("[저장 완료]");
}
public static GameData Load()
{
if (File.Exists(savePath))
{
string json = File.ReadAllText(savePath);
return JsonConvert.DeserializeObject<GameData>(json); // json 문자열을 GameData 클래스로 되돌리기
}
Console.WriteLine("저장 데이터가 없습니다.");
return null;
}
public static void DeleteSave()
{
if (File.Exists(savePath))
{
File.Delete(savePath);
Console.WriteLine("[저장 데이터 삭제]");
}
}
public static bool SaveExists() => File.Exists(savePath); // 세이브파일이 있는지 확인
// 저장된 게임 불러오기 / 새로운 게임 시작하기
public static void LoadOrNewGame()
{
string choice;
do
{
Console.Clear();
Console.WriteLine("저장된 게임을 불러오시겠습니까? (y = 불러오기 / n = 새 게임");
choice = Console.ReadLine();
switch (choice)
{
case "y":
if (SaveSystem.SaveExists())
{
GameData loaded = SaveSystem.Load();
if (loaded != null)
{
Player.LoadPlayerData(loaded);
Console.WriteLine("[불러오기 완료]\nEnter를 눌러 계속하세요.");
Console.ReadLine();
}
else
{
Console.WriteLine("저장된 데이터를 불러오는 데 실패했습니다.");
Thread.Sleep(1000);
}
}
else
{
Console.WriteLine("저장된 게임이 없습니다! 새 게임을 시작합니다.");
Thread.Sleep(1000);
PlayerSettings.InitializePlayer();
choice = "n";
}
break;
case "n":
Console.WriteLine("[새 게임을 시작합니다]");
Thread.Sleep(1000);
PlayerSettings.InitializePlayer();
break;
default:
Console.WriteLine("y 또는 n 만 입력 가능합니다.");
Thread.Sleep(1000);
break;
}
}
while (choice != "y" && choice != "n");
}
}
처음 Json 으로 게임 데이터를 저장하려고 했을 때 방식도 모르고 개념도 모르다보니 이것저것 많이 찾아보게 되었는데
Json(JavaScript Object Notation)의 약자를 알게되고 개념을 이해해보려 여기저기 기웃거렸는데
데이터 교환 및 저장 용이성을 높이기 위해서 사용된다 하더라
https://lightgg.tistory.com/57#google_vignette
이 글을 읽고 Newtonsoft.Json 이라는 NuGet 패키지 확장이란걸 하던데 처음 존재를 알게됬다
기본으론 Json의 선택지가 별로 없었는데 이거 추가하고 보니깐 뭔가 엄청 많이 생겼더라;;
https://bluegun.tistory.com/127
이 글을 읽으면서 활용법에 대해서 공부
SerializeObject - 개체를 Json으로 직렬화
Formatting.Indented - Json을 들여쓰기해서 보기 쉽게
DeserializeObject - Json을 개체로 역직렬화