JsonUtility
Unity3D 2019. 3. 7. 01:31https://docs.unity3d.com/kr/current/Manual/JSONSerialization.html
https://answers.unity.com/questions/1123326/jsonutility-array-not-supported.html
벤치마크 테스트에서는 JsonUtility
가 인기 .NET JSON 솔루션에 비해(일부 솔루션보다 기능이 더 적기는 하지만) 훨씬 빠른 것으로 나타났습니다.
지원되는 타입
API는 MonoBehaviour
서브클래스, ScriptableObject
서브 클래스, 또는 [Serializable]
속성이 있는 일반 클래스/구조체를 지원합니다. 사용자가 전달하는 오브젝트는 스탠다드 Unity 시리얼라이저에 공급되어 처리되므로, 인스펙터에서 적용되는 규칙과 제한이 동일하게 적용됩니다. 즉 필드만 직렬화되고 Dictionary<>
같은 타입은 지원되지 않습니다.
예를 들어 프리미티브 타입 또는 배열 등 다른 타입을 API에 직접 전달하는 기능은 현재 지원되지 않습니다. 지금은 이러한 타입을 일종의 class
또는 struct
에 래핑해야 합니다.
에디터에만 EditorJsonUtility
라는 병렬 API가 있습니다. API는 UnityEngine.Object
에서 파생된 타입을 JSON과 상호 직렬화하기 위해 사용할 수 있습니다. 그러면 오브젝트의 YAML 표현과 동일한 데이터가 포함된 JSON이 생성됩니다.
문자열 인용부호 넣기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | using System; using System.Collections; using System.Collections.Generic; using UnityEngine; [Serializable] public class CharacterData { public int id; public string name; public string res_name; public string sprite_name; } public class JsonUtilityHelper { public static T[] FromJson<T>(string json) { string newJson = "{ \"array\": " + json + "}"; Debug.Log(newJson); Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson); return wrapper.array; } public static string ToJson<T>(T[] array) { Wrapper<T> wrapper = new Wrapper<T>(); wrapper.array = array; return JsonUtility.ToJson(wrapper); } [Serializable] private class Wrapper<T> { public T[] array; } } public class App : MonoBehaviour { public TextAsset ta; // Start is called before the first frame update void Start() { var arrCharacterData = JsonUtilityHelper.FromJson<CharacterData>(ta.text); foreach (var data in arrCharacterData) { Debug.LogFormat("{0} {1}", data.id, data.name); } var json = JsonUtilityHelper.ToJson(arrCharacterData); Debug.Log(json); } // Update is called once per frame void Update() { } } | cs |
[Serializable] 하지 않는다면?
NullReferenceException: Object reference not set to an instance of an object
App.Start () (at Assets/App.cs:48)
Serialization은 개체를 저장하거나 메모리, 데이터베이스 또는 파일로 전송하기 위해 개체를 바이트 스트림으로 변환하는 프로세스입니다. 주 목적은 필요할 때 다시 만들 수 있도록 개체의 상태를 저장하는 것입니다. 역 프로세스를 deserialization이라고 합니다.
Serialization 작동 방법
이 그림에서는 serialization의 전체 프로세스를 보여 줍니다.
개체는 스트림으로 serialize되어 데이터 뿐만 아니라 버전, 문화권 및 어셈블리 이름과 같은 개체 형식에 대한 정보를 운반합니다. 해당 스트림에서 데이터베이스, 파일 또는 메모리에 저장될 수 있습니다. (이하 생략)
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/serialization/
'Unity3D' 카테고리의 다른 글
How Unity Supports Cross Platform Feature (0) | 2019.03.20 |
---|---|
C# 컴파일 그리고 il2cpp (0) | 2019.03.07 |
Unity의 회전 및 오리엔테이션 (0) | 2019.02.20 |
Unity와 Firebase 실시간 데이터베이스 + 구글로그인 (0) | 2019.02.12 |
Unity Firebase Auth with Google Play ( Unity에서 Google Play 게임 서비스를 사용하여 인증하기) (2) | 2019.02.12 |