ValueWrapper.cs 1012 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. using UnityEngine;
  3. namespace UnityEditor.SettingsManagement
  4. {
  5. [Serializable]
  6. sealed class ValueWrapper<T>
  7. {
  8. #if PRETTY_PRINT_JSON
  9. const bool k_PrettyPrintJson = true;
  10. #else
  11. const bool k_PrettyPrintJson = false;
  12. #endif
  13. [SerializeField]
  14. T m_Value;
  15. public static string Serialize(T value)
  16. {
  17. var obj = new ValueWrapper<T>() { m_Value = value };
  18. return EditorJsonUtility.ToJson(obj, k_PrettyPrintJson);
  19. }
  20. public static T Deserialize(string json)
  21. {
  22. var value = (object)Activator.CreateInstance<ValueWrapper<T>>();
  23. EditorJsonUtility.FromJsonOverwrite(json, value);
  24. return ((ValueWrapper<T>)value).m_Value;
  25. }
  26. public static T DeepCopy(T value)
  27. {
  28. if (typeof(ValueType).IsAssignableFrom(typeof(T)))
  29. return value;
  30. var str = Serialize(value);
  31. return Deserialize(str);
  32. }
  33. }
  34. }