지난 번에는 NewtonsSoft.Json을 이용해 직렬화, 역직렬화를 진행했다.
NewtonsSoft.Json
https://velog.io/@paenge1004/TIL-C-day-29
이번에는 따로 패키지 설치 없이, System.Text.Json 을 이용하자.
우선 using 지시문을 작성한다.
구현
이전 포스팅을 보고 왔다면(NewtonsSoft.Json) 이해하기 쉬울 것이다.
public static void SaveGameData()
{
// 파일 이름 설정 _playerData.json
string fileName = "_playerData.json";
// 파일 저장 경로 설정
string userDocumentsFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// 파일 저장 경로 + 파일 이름 C:\Users\XXXX\Documents\_playerData.json)
string filePath = Path.Combine(userDocumentsFolder, fileName);
// Json 형식 정렬
var options = new JsonSerializerOptions { WriteIndented = true };
// Json 직렬화
string playersData = JsonSerializer.Serialize(MainProgram.player, options);
// 유니코드 -> 한글 변환
playersData = Regex.Unescape(playersData);
// 파일 생성
File.WriteAllText(filePath, playersData);
}
string playersData = JsonSerializer.Serialize(MainProgram.player, options);
string _playerJson = JsonConvert.SerializeObject(_playerStat, Formatting.Indented);
직렬화 문법이 다르다.
var options = new JsonSerializerOptions { WriteIndented = true };
안녕하세요
->
\uC548\uB155\uD558\uC138\uD558
따라서, 이스케이프 문자열을 원래의 형태로 바꿔주기 위해 아래 함수를 추가했다.
playersData = Regex.Unescape(playersData);
public static void LoadGameData()
{
string fimeName = "_playerData.json";
string userDocumentsFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string filePath = Path.Combine(userDocumentsFolder, fimeName);
if(File.Exists(filePath))
{
string playerJson = File.ReadAllText(filePath);
playerJson = Regex.Unescape(playerJson);
Character loadedCharacter = JsonSerializer.Deserialize<Character>(playerJson);
MainProgram.player = loadedCharacter;
}
else
{
// 추후 게임 데이터 설정화면 생기면 이동.
Console.WriteLine("데이터가 없습니다.");
Thread.Sleep(500);
MainProgram.GameDataSetting();
}
}
메인 화면을 바로 실행한다.
휴식을 진행하면, 체력과 마나를 50씩 올려준다.
휴식이 진행되는 모습이다.(사진의 숫자는 관계없음!)
플레이어의 문서 폴더에 json파일이 성공적으로 저장된 모습이다.