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); } }
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); }
protected abstract object LoadValue(PersistantAttribute attribute, Type objectType);
protected abstract void SaveValue(PersistantAttribute attribute, object saveValue);