namespace Zinnia.Data.Type { using System; using UnityEngine; /// /// Specifies a serializable data type. /// [Serializable] public class SerializableType : ISerializationCallbackReceiver { /// /// The actual of the held serializable type. /// public Type ActualType { get; set; } /// /// The name of the type in full assembly qualified format. /// [SerializeField] private string assemblyQualifiedTypeName; /// /// Converts from to . /// /// The item to convert. public static implicit operator Type(SerializableType serializableType) { return serializableType.ActualType; } /// /// Converts from to . /// /// The item to convert. public static implicit operator SerializableType(Type type) { return new SerializableType { ActualType = type, assemblyQualifiedTypeName = type.AssemblyQualifiedName }; } /// public void OnBeforeSerialize() { assemblyQualifiedTypeName = ActualType?.AssemblyQualifiedName; } /// public void OnAfterDeserialize() { if (assemblyQualifiedTypeName == null) { return; } try { ActualType = Type.GetType(assemblyQualifiedTypeName); } catch (Exception exception) { Debug.LogException(exception); ActualType = null; } } } }