84 lines
3.1 KiB
C#
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);
|
|
}
|
|
|
|
|
|
}
|
|
}
|