Пример #1
0
        public void SaveObject <T>(T source)
        {
            FieldInfo[] fields = source.GetType().GetFields(findFieldFlags);
            int         length = fields.Length;

            for (int i = 0; i < length; i++)
            {
                if (!IsFieldPersistant(fields[i]))
                {
                    continue;
                }

                PersistantAttribute att = (PersistantAttribute)fields[i].GetCustomAttribute(PersistantAttType, false);
                object fieldValue       = fields[i].GetValue(source);

                if (!CanSetValue(att.DefaultValue, fieldValue))
                {
                    continue;
                }
                SaveValue(att, fieldValue);
            }
        }
Пример #2
0
        public T LoadObject <T>(T source)
        {
            FieldInfo[] fields = source.GetType().GetFields(findFieldFlags);
            int         length = fields.Length;

            for (int i = 0; i < length; i++)
            {
                if (!IsFieldPersistant(fields[i]))
                {
                    continue;
                }

                PersistantAttribute att = (PersistantAttribute)fields[i].GetCustomAttribute(PersistantAttType, false);
                object fieldValue       = fields[i].GetValue(source);

                if (!CanSetValue(att.DefaultValue, fieldValue))
                {
                    continue;
                }
                fields[i].SetValue(source, LoadValue(att, fieldValue.GetType()));
                //fields[i].SetValueDirect(__makeref(source), LoadValue(att, fieldValue.GetType())); // doesn't work in unity 2017.3
            }
            return(source);
        }
Пример #3
0
 protected abstract object LoadValue(PersistantAttribute attribute, Type objectType);
Пример #4
0
 protected abstract void SaveValue(PersistantAttribute attribute, object saveValue);