직렬화
• 객체(Object)나 데이터를 파일, 네트워크 전송, 데이터베이스 저장이 가능하도록 **바이트 스트림(byte stream)**으로 변환하는 과정
• 데이터를 저장하거나 다른 시스템과 통신할 때 사용됨
역직렬화
• 직렬화된 바이트 스트림을 다시 원래의 객체로 변환하는 과정
• 저장된 데이터나 전송된 데이터를 원래의 형태로 복원하는 역할
XML의 직렬화/역직렬화

weaponInventory 리스트를 xmlWeapon파일에 xml형식으로 변환해 저장한다.
XmlSerializer는 xmlWriter과 같은 포맷래퍼다.

File.OpenRead를 사용해 쓰기용이 아닌 읽기용으로 연다.
디버그를 사용해 역직렬화된 weapon을 확인한다.
JSON의 직렬화/역직렬화
JSON을 직렬화 및 역직렬화할 때, 유니티와 C#이 완전히 동기화되지는 않는다.
기본적으로, C에는 이전 예제에서 사용한 XmlSerializer 클래스와 정확히 동일한 방식으로 작동하는 자체 Jsonserializer 클래스를 사용한다.
JSON 시리얼라이저에 액세스 하려면,System. Text.Json using 지시문이 필요하다.
문제는 유니티가 해당 네임스페이스를 지원하지 않는다는 것이다.
그 대신에 유니티에서는 System. Text 네임스페이스를 사용하고 JsonUtility라는 자체 JSON 시리얼라이저 클래스를 구현한다.

Weapon의 sword객체를 생성한다.
JsonUtility.ToJson을 사용해 객체를 JSON문자열로 변환한다. true를 사용하면 들여 쓰기를 통해 가독성을 높일 수 있다.

xml 직렬화에 사용한 무기 리스트를 사용하면 에러가 난다.
JSON직렬화는 리스트나 배열을 자체적으로 지원하지 않기 때문이다.


[Serializable]는 객체를 직렬화할 수 있는 어트리뷰트이다.
WeaponShop 객체를 생성하고 무기 리스트를 shop에 넣는다.
이후 JSON으로 변환하면 에러가 생기지 않는다.

'Unity & C# Basics' 카테고리의 다른 글
| C# 공부일지 : 데이터의 저장, 로드 (0) | 2025.01.24 |
|---|---|
| C# 공부일지 : Stack, Queue, Hashset (0) | 2025.01.24 |
| C# 공부일지 : 엑세스 한정자, 메서드, OOP (0) | 2025.01.24 |
| C#책 공부일지 : Rigidbody, Update, Quaternion, Euler (0) | 2023.10.26 |
| C#책 공부일지 : Player Movement (1) | 2023.10.26 |