private static Type GetTypeFromSerializedString(TypeSerializationInfo typeInfo)
        {
            if (!typeInfo.IsValid())
            {
                return(null);
            }

            return(Type.GetType(typeInfo.SearchString()));
        }
Exemplo n.º 2
0
        static Type GetTypeFromSerializedString(TypeSerializationInfo typeInfo)
        {
            if (!typeInfo.IsValid())
            {
                return(null);
            }

            var assemblies = AppDomain.CurrentDomain.GetAssemblies();

            foreach (var assembly in assemblies)
            {
                var type = assembly.GetType(typeInfo.fullName);
                if (type != null)
                {
                    return(type);
                }
            }

            return(null);
        }
        public static T Deserialize <T>(string data, TypeSerializationInfo typeInfo, Dictionary <TypeSerializationInfo, TypeSerializationInfo> remapper, params object[] constructorArgs) where T : class
        {
            if (!typeInfo.IsValid() || string.IsNullOrEmpty(data))
            {
                throw new ArgumentException($"Can not deserialize {data} of type {typeInfo}, it is invalid");
            }

            typeInfo.fullName = typeInfo.fullName.Replace("UnityEngine.MaterialGraph", "UnityEditor.ShaderGraph");
            typeInfo.fullName = typeInfo.fullName.Replace("UnityEngine.Graphing", "UnityEditor.Graphing");
            if (remapper != null)
            {
                typeInfo = DoTypeRemap(typeInfo, remapper);
            }

            var type = GetTypeFromSerializedString(typeInfo);

            if (type == null)
            {
                throw new ArgumentException($"Can not deserialize ({typeInfo.fullName}), type is invalid");
            }

            T instance;

            try
            {
                instance = Activator.CreateInstance(type, constructorArgs) as T;
            }
            catch (Exception e)
            {
                throw new Exception($"Could not construct instance of: {type}", e);
            }

            if (instance != null)
            {
                JsonUtility.FromJsonOverwrite(data, instance);
                return(instance);
            }
            return(null);
        }