유니티상의 데이터를 JSON으로 바꾸거나 반대로 JSON을 데이터로 바꿀 경우가 있다.
이때 JsonConvert.SerializeObject와 JsonUtility.ToJson을 사용할 수 있다.
두개는 데이터를 JSON으로 바꾸는것은 거의 동일하지만 내부 동작이 다르다.
JsonUtility.ToJson은 유니티에 기본적으로 내장되어 있다는점이 가장 큰 특징이다.
기본적으로 클래스를 지원하지만 리스트나 딕셔너리등의 컬렉션은 지원되지 않는다.
이는 기본적으로 직렬화 가능한 클래스만 JSON으로 바꾸기 때문이다.
[System.Serializable]
public class ItemData {
public string name;
public int price;
}
ItemData item = new ItemData { name = "Potion", price = 100 };
string json = JsonUtility.ToJson(item);
// 결과: {"name":"Potion","price":100}
JsonUtility.ToJson은 Newtonsoft.Json를 불러와야 사용할 수 있다.
클래스를 지원하며, 리스트와 딕셔너리등의 컬렉션도 지원된다.
using Newtonsoft.Json;
ItemData item = new ItemData { name = "Potion", price = 100 };
string json = JsonConvert.SerializeObject(item);
// 결과: {"name":"Potion","price":100}
JsonUtility.ToJson은 기본 내장 되어 있는만큼 유니티에 최적화 되어있다.
그렇기에 간단한 구조의 클래스에 대해서는 JsonUtility를 사용한다.
JsonConvert는 다양한 클래스를 지원하나 상대적으로 무겁다.
그렇기에 리스트나 딕셔너리를 바로 JSON으로 바꾸거나 통신과 연동할 때 사용한다.