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;
}
}
}
}