| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | #if !COMBAT_SERVERusing System;using System.Collections.Generic;using UnityEngine;namespace Fort23.GameData{    public class JsonHelper    {        public static string ToJson(object obj)        {#if !COMBAT_SERVER            return JsonUtility.ToJson(obj);#endif            return null;        }        public static T FromJson<T>(string json)        {#if !COMBAT_SERVER            return JsonUtility.FromJson<T>(json);#endif            return default;        }        public static object FromJson(string json, Type type)        {#if !COMBAT_SERVER            return JsonUtility.FromJson(json, type);#endif            return null;        }        public static T Clone<T>(T t)        {            return FromJson<T>(ToJson(t));        }    }    /// <summary>    /// 扩展JsonUtility的List能力, T必须加上[Serializable]标签    /// https://blog.csdn.net/Truck_Truck/article/details/78292390    /// </summary>    /// <typeparam name="T"></typeparam>    [Serializable]    public class Serialization<T>    {        [SerializeField] List<T> target;        public List<T> ToList()        {            return target;        }        public Serialization(List<T> target)        {            this.target = target;        }    }    /// <summary>    /// 扩展JsonUtility的Dictionary能力,TValue必须加上[Serializable]标签    /// Dictionary<TKey, TValue>    /// </summary>    /// <typeparam name="TKey"></typeparam>    /// <typeparam name="TValue"></typeparam>    [Serializable]    public class Serialization<TKey, TValue> : ISerializationCallbackReceiver    {        [SerializeField] List<TKey> keys;        [SerializeField] List<TValue> values;        Dictionary<TKey, TValue> target;        public Dictionary<TKey, TValue> ToDictionary()        {            return target;        }        public Serialization(Dictionary<TKey, TValue> target)        {            this.target = target;        }        public void OnBeforeSerialize()        {            keys = new List<TKey>(target.Keys);            values = new List<TValue>(target.Values);        }        public void OnAfterDeserialize()        {            var count = Math.Min(keys.Count, values.Count);            target = new Dictionary<TKey, TValue>(count);            for (var i = 0; i < count; ++i)            {                target.Add(keys[i], values[i]);            }        }    }}#endif
 |