public void Serialize(object value, Type type)
        {
            var wrapper = EditorSerializedFieldUtilities.GetWrapperForType(type);

            if (wrapper != null)
            {
//                if (type.IsEnum)
//                    value = Enum.ToObject(type, value);
                Serialize(wrapper, value);
                return;
            }

            if (type.GetCustomAttribute(typeof(SerializableAttribute), true) == null)
            {
                return;
            }

            wrapper = EditorSerializedFieldUtilities.GetWrapperForType(typeof(bool));
            wrapper.SetValue(MightyGUIUtilities.GetFoldout(m_fileName));

            WriteFile(m_path, wrapper);

            foreach (var field in type.GetSerializableFields())
            {
                EditorFieldsDatabase.GetEditorField(m_fileName).Serialize(field.GetValue(value), field.FieldType);
            }
        }
        public bool DeserializeOverwrite(Type type, out object value)
        {
            var wrapper = EditorSerializedFieldUtilities.GetWrapperForType(type);

            if (wrapper != null)
            {
                return(Deserialize(wrapper, out value));
            }

            value = null;

            if (type.GetCustomAttribute(typeof(SerializableAttribute), true) == null)
            {
                return(false);
            }

            if (!Exists())
            {
                return(false);
            }

            wrapper = EditorSerializedFieldUtilities.GetWrapperForType(typeof(bool));
            ReadFile(m_path, wrapper);
            wrapper.GetValue(out var foldout);
            MightyGUIUtilities.SetFoldout(m_fileName, (bool)foldout);

            value = Activator.CreateInstance(type);
            foreach (var field in type.GetSerializableFields())
            {
                EditorFieldsDatabase.GetEditorField(m_fileName).DeserializeOverwrite(field.FieldType, out var fieldValue);
                if (field.FieldType.IsEnum)
                {
                    fieldValue = Enum.ToObject(field.FieldType, fieldValue);
                }
                field.SetValue(value, fieldValue);
            }

            return(true);
        }
 private string SetFileName(string fieldName)
 {
     m_fileName = $"{m_guid}.{m_localId}.{fieldName}";
     return(EditorSerializedFieldUtilities.CreateEditorFieldPath(m_fileName));
 }