유니티 C# JsonConvert.SerializeObject와 JsonUtility.ToJson

김효중·2025년 5월 21일

개요

유니티상의 데이터를 JSON으로 바꾸거나 반대로 JSON을 데이터로 바꿀 경우가 있다.
이때 JsonConvert.SerializeObject와 JsonUtility.ToJson을 사용할 수 있다.

두개는 데이터를 JSON으로 바꾸는것은 거의 동일하지만 내부 동작이 다르다.

JsonUtility.ToJson

JsonUtility.ToJson은 유니티에 기본적으로 내장되어 있다는점이 가장 큰 특징이다.
기본적으로 클래스를 지원하지만 리스트나 딕셔너리등의 컬렉션은 지원되지 않는다.

  • 클래스 O
  • 리스트 X
  • 딕셔너리 X

이는 기본적으로 직렬화 가능한 클래스만 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}

JsonConvert.SerializeObject

JsonUtility.ToJson은 Newtonsoft.Json를 불러와야 사용할 수 있다.
클래스를 지원하며, 리스트와 딕셔너리등의 컬렉션도 지원된다.

  • 클래스 O
  • 리스트 O
  • 딕셔너리 O
    즉 JsonConvert는 직렬화(Serializable) 가능한 객체나 컬렉션이 아니여도 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으로 바꾸거나 통신과 연동할 때 사용한다.

profile
도전하는 개발자

0개의 댓글