using System;
using System.Collections.Generic;
using UnityEngine;
namespace JsonUtilityTool
{
/// <summary>
/// 只能单线程运行。
/// </summary>
public static class JsonUtilityHelper
{
/// <summary>
/// 可直接传入 list、array。
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string ToJson<T>(T obj)
{
bool isCollection = typeof(T).GetInterface("System.Collections.IList") != null;
if (obj == null)
{
return isCollection ? JsonUtility.ToJson(JsonWrapper<T>.emptyWrapper) : string.Empty;
}
else
{
return isCollection ? JsonWrapper<T>.ToJson(obj) : JsonUtility.ToJson(obj);
}
}
/// <summary> 解析Json </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="json">Json字符串</param>
public static T FromJson<T>(string json) {
if (string.IsNullOrEmpty(json))
return Activator.CreateInstance<T>();
bool isCollection = typeof(T).GetInterface("System.Collections.IList") != null;
if (isCollection)
{
try
{
JsonWrapper<T> wrapper = JsonUtility.FromJson<JsonWrapper<T>>(json);
return wrapper.data;
}
catch (Exception e)
{
Debug.LogError($"{nameof(JsonUtilityHelper)} error json: {json} for {typeof(T).Name}, msg {e}");
return Activator.CreateInstance<T>();
}
}
return JsonUtility.FromJson<T>(json);
}
private class JsonWrapper<T>
{
public readonly static JsonWrapper<T> emptyWrapper = new JsonWrapper<T>();
private readonly static JsonWrapper<T> wrapper = new JsonWrapper<T>();
public T data;
public static string ToJson(T value)
{
wrapper.data = value;
return JsonUtility.ToJson(wrapper);
}
}
}
}
(004)Unity JsonUtilit 扩展数组
于 2024-01-27 14:32:12 首次发布