직렬화란 객체나 데이터 및 구조를 전송할 수 있는 형태로 개체 상태를 변환하는 프로세스이다. 주로 문자열이나 바이트 배열 등의 포맷으로 변환한다. 직렬화된 파일을 전달받아 다시 객체나 데이터 및 구조로 변환하는 작업은 역직렬화 ( Deserialization ) 라고 한다. 주로 진행사항을 저장하거나, 네트워크에서 서로 데이터를 주고받기 위해 한다.
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Xml.Linq;
[Serializable]
struct PlayerInfo
{
public int id { get; set; }
public string name { get; set; }
public float damage { get; set; }
}
class Program
{
public static void SaveData(PlayerInfo playerinfo)
{
string jsonString = JsonSerializer.Serialize(playerinfo);
File.WriteAllText("playerinfo.json", jsonString);
}
public static PlayerInfo Load()
{
string jsonString = File.ReadAllText("playerinfo.json");
return JsonSerializer.Deserialize<PlayerInfo>(jsonString);
}
static void Main()
{
PlayerInfo playerinfo = new PlayerInfo();
playerinfo.id = 1;
playerinfo.name = "Player1";
playerinfo.damage = 50.5f;
SaveData(playerinfo);
PlayerInfo loadedPlayerInfo = Load();
Console.WriteLine($"ID: {loadedPlayerInfo.id}");
Console.WriteLine($"Name: {loadedPlayerInfo.name}");
Console.WriteLine($"Damage: {loadedPlayerInfo.damage}");
}
}
ID: 1
Name: Player1
Damage: 50.5
다음 스크립트는 플레이어 정보를 담는 구조체와 해당 구조체를 직렬화 하여 JSON 파일을 저장하고, 역직렬화 하여 JSON 파일로 부터 구조체를 읽어오는 내용을 포함하고 있다. 파일이 빌드되어 있는 경로로 가보면, JSON 파일이 생성되어있을것이다.
{"id":1,"name":"Player1","damage":50.5}
보이는 것과 같이 최초로 생성하였던 playerinfo의 정보가 들어있다.