오늘은 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을 개체로 역직렬화

0개의 댓글