using Newtonsoft.Json; using System.Collections; using UnityEngine; namespace UVC.Json { /// /// Json 직렬화/역직렬화 시 사용해야 함. /// 배열과 컬렉션은 Best.HTTP.JSON.LitJson, 일반 객체는 Unity의 JsonUtility를 사용합니다. /// Newtonsoft.Json을 사용한 역직렬화를 지원합니다. /// public static class JsonHelper { /// /// 객체를 JSON 문자열로 직렬화합니다. /// /// 직렬화할 객체 /// JSON 형식의 문자열 /// /// 객체가 배열이나 컬렉션인 경우 Best.HTTP.JSON.LitJson을 사용하고, /// 그 외의 경우엔 Unity의 JsonUtility를 사용합니다. /// /// /// /// // 단일 객체 직렬화 /// var user = new User { Id = 1, Name = "홍길동" }; /// string userJson = JsonHelper.ToJson(user); /// /// // 배열 직렬화 /// var users = new User[] { /// new User { Id = 1, Name = "홍길동" }, /// new User { Id = 2, Name = "김철수" } /// }; /// string arrayJson = JsonHelper.ToJson(users); /// /// public static string ToJson(object obj) { if (obj.GetType().IsArray || obj is ICollection) { return Best.HTTP.JSON.LitJson.JsonMapper.ToJson(obj); } else { return JsonUtility.ToJson(obj); } } /// /// JSON 문자열을 지정된 타입의 객체로 역직렬화합니다. /// /// 변환할 대상 객체 타입 /// 역직렬화할 JSON 문자열 /// 역직렬화된 T 타입의 객체 /// /// JsonProperty 속성을 지원하기 위해 Newtonsoft.Json 라이브러리를 사용합니다. /// 이전에 사용하던 LitJson은 JsonProperty 지원이 제한적이었습니다. /// /// /// /// // 단일 객체 역직렬화 /// string userJson = "{\"Id\":1,\"Name\":\"홍길동\"}"; /// User user = JsonHelper.FromJson(userJson); /// Debug.Log($"사용자 정보: {user.Id}, {user.Name}"); /// /// // 컬렉션 역직렬화 /// string arrayJson = "[{\"Id\":1,\"Name\":\"홍길동\"},{\"Id\":2,\"Name\":\"김철수\"}]"; /// List users = JsonHelper.FromJson>(arrayJson); /// foreach(var u in users) { /// Debug.Log($"사용자 정보: {u.Id}, {u.Name}"); /// } /// /// public static T FromJson(string json) { //JsonProperty 지원안해서 newtonsoft로 변경 //return Best.HTTP.JSON.LitJson.JsonMapper.ToObject(json); return JsonConvert.DeserializeObject(json); } } }