Files
EnglewoodLAB/Assets/Scripts/UVC/Json/JsonHelper.cs

84 lines
3.1 KiB
C#

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