1 minute read

#직렬화

직렬화 (Serialization)

해당 내용에 들어갈 데이터들을 Byte Array로 묶어서 나열된 내용으로 만드는 것.

역직렬화 (Deserialization)

나열된 내용을 가져와서 반대로 필요한 데이터들로 변환하는 것

CSV (comma separated values>

콤마 “,” 를 기준으로 나눠 저장하는 방법
흔히 엑셀에서 쓴다.
엑셀을 저장하고 이걸 유니티에서 읽어올 때 쓸 수도 있는데, 이 때 csv파일은 UTF-8 이어야 한글이 안 깨진다.
엑셀은 역시나 수정이 쉽고 보기 쉬워서 기획자가 만든 파일을 그대로 불러와서 쓰기 편하다.

var data = Resources.Load<TextAsset>("CSV파일 이름");

이런 식으로 데이터를 가져온다.
“data.text”로 출력 해보면 “,” 랑 “\n”으로 엑셀에서 본 모양 그대로 나오는데 이를 가져다가 쓰면 된다.
맨 마지막에 “\r”이 있어서 이것도 예외처리 해줘야한다.
이 부분은 data.text.TrimEnd()로 마지막\r를 잘라줄 수 있다.

XML

HTML이랑 비슷하게 열고 닫기를 써서 데이터를 저장하고 열고 닫기에 쓰인 이름을 통해 해당 데이터가 뭘 뜻하는지 알 수 있다.

using System.Xml;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"));

XmlNode root = xmlDoc.CreateNode(XmlNodeType.Element, "GameData", string.Empty);
xmlDoc.AppendChild(root);

XmlElement nickname = xmlDoc.CreateElement("nickname");
nickname.InnerText = p.nickname;
root.AppendChild(nickname);

xmlDoc.Save("경로");

이런식으로 만드는데, 좀 너무 뭘 많이 써야한다…
불러올 때는 csv처럼 불러오면 된다. 단지 내장함수로 정보 역직렬화가 쉽다.

var t = Resources.Load<TextAsset>("파일이름");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(t.txt);
XmlNodeList nodes = xmlDoc.SelectNodes("파일이름/노드모음");
XmlNode n = nodes[0];


Json

저장뿐만 아니라 서버 통신할 경우 Json으로 한다.
NewtonSoft, JsonUtility 말고도 LitJson이 있다.
근데 JsonUtility가 가장 빠르기 때문에 이게 제일 좋다.
이는 유니티에서 기본 제공해주는 JsonUtility는 즉시 C++기반으로 돌아가는데 이외의 패키지는 C#을 한번 돌리기에 오래 걸린다.