File size: 1,012 Bytes
18a519f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using UnityEngine;

namespace UnityEditor.SettingsManagement
{
    [Serializable]
    sealed class ValueWrapper<T>
    {
#if PRETTY_PRINT_JSON
        const bool k_PrettyPrintJson = true;
#else
        const bool k_PrettyPrintJson = false;
#endif

        [SerializeField]
        T m_Value;

        public static string Serialize(T value)
        {
            var obj = new ValueWrapper<T>() { m_Value = value };
            return EditorJsonUtility.ToJson(obj, k_PrettyPrintJson);
        }

        public static T Deserialize(string json)
        {
            var value = (object)Activator.CreateInstance<ValueWrapper<T>>();
            EditorJsonUtility.FromJsonOverwrite(json, value);
            return ((ValueWrapper<T>)value).m_Value;
        }

        public static T DeepCopy(T value)
        {
            if (typeof(ValueType).IsAssignableFrom(typeof(T)))
                return value;
            var str = Serialize(value);
            return Deserialize(str);
        }
    }
}