public static ITransitionCondition Deserialize(string serializedClassWrapper)
        {
            SerializedClassWrapper serializedConditionWrapper = JsonUtility.FromJson <SerializedClassWrapper>(serializedClassWrapper);

            if (serializedConditionWrapper == null)
            {
                Debug.LogError("TransitionConditionSerializer - Deserialize failed to deserialize class wrapper!");
                return(null);
            }

            Type type = Type.GetType(serializedConditionWrapper.typeName);

            MethodInfo genericMethod = typeof(TransitionConditionSerializer).GetMethod("DeserializeCondition", BindingFlags.Static | BindingFlags.NonPublic);
            MethodInfo method        = genericMethod.MakeGenericMethod(type);

            return(method.Invoke(null, new object[] { serializedConditionWrapper.serializedClass }) as ITransitionCondition);
        }
        public static string Serialize(ITransitionCondition condition)
        {
            if (condition == null)
            {
                Debug.LogError("TransitionConditionSerializer - Serialize was passed in null condition!");
                return("");
            }

            Type type = condition.GetType();

            MethodInfo genericMethod = typeof(TransitionConditionSerializer).GetMethod("SerializeCondition", BindingFlags.Static | BindingFlags.NonPublic);
            MethodInfo method        = genericMethod.MakeGenericMethod(type);

            string serializedCondition = (string)method.Invoke(null, new object[] { condition });

            var serializedConditionWrapper = new SerializedClassWrapper(type, serializedCondition);

            return(JsonUtility.ToJson(serializedConditionWrapper, prettyPrint: true));
        }