Pink Transparent Star

Unity/개념 공부

[ 내일배움캠프 ] TIL.10 - Newtonsoft.Json

채유나 2024. 4. 26. 22:29
728x90

 

그동안 Unity로만 데이터를 저장하고 로드하는 방법,  XML을 이용한 저장하는 방법 대해 배웠는데

Text RPG를 제작하면서 Visual Studio를 통해 Json을 사용하는 방법에 대해 배울 수 있었다.

 

데이터를 저장하고 로드하는건 쉬운 것 같으면서도 아직까지 어려운 것같아 구현에 성공한 내용을 정리하려고 한다.

 

또 유니티를 통한 Json 방법은 이전에 정리했는데 이번에 적용한 Json 방식과 크게 다르지 않는 것 같다.

 

[ 내일배움캠프 ] TIL.04 - Json 파일 파싱

해당 내용은 내가 담당했던 부분 중 데이터 저장 후 점수 표출하기 부분에 대한 내용을 다뤄보고자 한다. PlayerPrefs를 이용해서 간단하게 접근이 가능했었겠지만 많이 사용해봤던 PlayerPrefs가 아

o-joyuna.tistory.com

 

🔷 Visual Studio Json 사용법

 

1. Visual Studio 창에서 프로젝트 - NuGet 패키지 관리 선택

 

2. NewtonsSoft.Json 패키지 검색 후 설치

 

3. using Newtonsoft.Json; 문 작성 후 사용

 

 

파일경로 지정

 private string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "playerData.json");

 

 

 

Environment.GetFolderPath 메서드 (System)

지정된 열거형으로 식별되는 시스템 특수 폴더의 경로를 가져옵니다.

learn.microsoft.com

Environment.GetFolerPath : 특수한 폴더의 경로를 구할 수 있는 정적 메서드

Envionment.SpecialFolder : 파일 경로에 대한 열거형 인수를 받는다.

 

🔸 열거형의 종류

▪ Environment.SpecialFolder.Desktop : 바탕화면 폴더

▪ Environment.SpecialFolder.MyDocuments : 내 문서 폴더

▪ Environment.SpecialFolder.ProgramFiles : 프로그램 파일 폴더

▪ Environment.SpecialFolder.Windows : Windows 폴더

▪ Envionment.SpecialFolder.System : 시스템 폴더

 

5가지의 종류가 있으며 그 중 MyDocuments를 사용하여 파일 경로를 지정해주었다.

MyDocuments의 경우 C:\Users\Username\Documents 의 경로에 파일이 저장이 된다.

 

 

🔷 파일 저장하기

 

버튼을 눌렀을 때 지금까지 플레이어의 정보들을 저장할 수 있도록 구현했다.

public void SaveGameData(Player player)
{
    string _playerJson = JsonConvert.SerializeObject(player, Formatting.Indented);
    File.WriteAllText(fileName, _playerJson);
    Console.WriteLine("저장이 완료되었습니다.");

    Thread.Sleep(2000);
}

 

💡 직렬화(Serialize)

외부의 시스템에서 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술

코드 내의 객체나 해시테이블, 딕셔너리 등을 Json으로 변환하는 과정을 의미

 

 

JsonConvert.SerializeObject(object, Formatting) : 문자열 또는 파일에 Json를 이용하려면 해당 메서드를 호출한다. 

첫번째 인자 object 에선 직렬화할 객체, 두번째 인자 Formatting은 형식 지정 옵션 전달

File.WriteAllText(string, string) : 새 파일을 만들고 파일에 내용을 쓴 다음 파일을 닫음

 

 

C#에서 JSON을 직렬화하는 방법 - .NET

.NET에서 System.Text.Json 네임스페이스를 사용하여 JSON으로 직렬화하는 방법을 알아봅니다. 샘플 코드가 포함되어 있습니다.

learn.microsoft.com

 

 

File.WriteAllText 메서드 (System.IO)

새 파일을 만들고 파일에 내용을 쓴 다음 파일을 닫습니다. 대상 파일이 이미 있는 경우 잘리고 덮어씁니다.

learn.microsoft.com

 


 

첫 게임을 실행했을 때 나오는 선택지에서 이어서하기를 누를 경우 저장된 파일을 로드 할 수 있도록 구현했다.

 

💡 역직렬화

외부 시스템의 바이트 형태의 데이터를 객체나 해시테이블, 딕셔너리 등으로 변환하는 것을 의미

🔷 파일 불러오기

public Player LoadGameData()
{
    //저장 예외처리
    try 
    { 
        if(!File.Exists(fileName))
        {
            Console.WriteLine("저장된 파일이 없습니다.");
            return null;
        }
        string playerJson = File.ReadAllText(fileName);
        Player player = JsonConvert.DeserializeObject<Player>(playerJson);
        Console.WriteLine("저장된 파일을 불러왔습니다.");

        Thread.Sleep(2000);
        return player;
        
    }
    catch(Exception e)
    {
        TextWriter errorWriter = Console.Error;
        errorWriter.WriteLine("데이터 로드 중 오류가 발생하였습니다. : " + e.Message );


        return null;
    }

    
}

 

 

 

JsonConvert.DeserializeObject<object>(string) : 문자열 또는 파일에서 역직렬화하려면 해당 메서드를 호출한다.

<object>변환할 객체의 형식 , 두번째 인자는 Json 문자열

File.Exists(파일 경로): 지정된 파일이 있는지 확인하여 Bool값을 반환

File.ReadAllText(파일 경로) : 지정된 파일을 열고 파일의 모든 텍스트를 문자열로 읽은 후 파일을 닫음

 

 

 

File.ReadAllText Method (System.IO)

Opens a text file, reads all the text in the file into a string, and then closes the file.

learn.microsoft.com

 

 

C#에서 JSON을 역직렬화하는 방법 - .NET

.NET에서 System.Text.Json 네임스페이스를 사용하여 JSON으로부터 역직렬화하는 방법을 알아봅니다. 샘플 코드가 포함되어 있습니다.

learn.microsoft.com

 

Json 파일 확인

 

 

 

 

이전에 적용해봤던 Unity의 Json 방식과 크게 다르지 않아 좀 더 빠르게 이해할 수 있었고 몇 번 더 사용을 하다보면 제대로 이해하고 사용할 수 있을 것 같다..! 어떻게 하는 건지 모르겠다고 넘어갔던 부분을 직접 구현해면서 이해하기 수월한것 같다!

 

참고 사이트

 

[TIL] C# - Newtonsoft.Json - day 29

새로운 팀이 구성됐다!다양하게 팀을 구성하는 내일배움캠프 시스템이 좋다.새로운 유형의 사람을 만나보는 것도 굉장히 중요한 경험이다.그룹에 자연스럽게 녹아들 수 있는 사람이 되어보자!

velog.io

 

728x90