public override object Read(ES3Reader reader) { /*var method = typeof(ES3CollectionType).GetMethod("ReadICollection", BindingFlags.Instance | BindingFlags.NonPublic).MakeGenericMethod(elementType.type); * if(!(bool)method.Invoke(this, new object[] { reader, list, elementType })) * return null;*/ var genericParam = ES3Reflection.GetGenericArguments(type)[0]; var listType = ES3Reflection.MakeGenericType(typeof(List <>), genericParam); var list = (IList)ES3Reflection.CreateInstance(listType); if (!reader.StartReadCollection()) { // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadCollectionItem()) { break; } list.Add(reader.Read <object>(elementType)); if (reader.EndReadCollectionItem()) { break; } } reader.EndReadCollection(); } return(ES3Reflection.CreateInstance(type, list)); }
/* * Allows us to call the generic Read method using Reflection so we can define the generic parameter at runtime. * It also caches the method to improve performance in later calls. */ public object Read(ES3Reader reader) { if (reader.StartReadDictionary()) { return(null); } var dict = (IDictionary)ES3Reflection.CreateInstance(type); // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadDictionaryKey()) { return(dict); } var key = reader.Read <object>(keyType); reader.EndReadDictionaryKey(); reader.StartReadDictionaryValue(); var value = reader.Read <object>(valueType); dict.Add(key, value); if (reader.EndReadDictionaryValue()) { break; } } reader.EndReadDictionary(); return(dict); }
public override object Read(ES3Reader reader) { var instance = (IList)ES3Reflection.CreateInstance(type); if (reader.StartReadCollection()) { return(null); } // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadCollectionItem()) { break; } instance.Add(reader.Read <object>(elementType)); if (reader.EndReadCollectionItem()) { break; } } reader.EndReadCollection(); return(instance); }
protected override object ReadObject <T>(ES3Reader reader) { var obj = ES3Reflection.CreateInstance(this.type); ReadProperties(reader, obj); return(obj); }
public override object Read(ES3Reader reader) { var instance = (IList)ES3Reflection.CreateInstance(ES3Reflection.MakeGenericType(typeof(List <>), elementType.type)); if (reader.StartReadCollection()) { return(null); } // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadCollectionItem()) { break; } instance.Add(reader.Read <object>(elementType)); if (reader.EndReadCollectionItem()) { break; } } reader.EndReadCollection(); ES3Reflection.GetMethods(instance.GetType(), "Reverse").FirstOrDefault(t => !t.IsStatic).Invoke(instance, new object[] {}); return(ES3Reflection.CreateInstance(type, instance)); }
public override object Read <T>(ES3Reader reader) { var list = ES3Reflection.CreateInstance(type); var method = typeof(ES3CollectionType).GetMethod("ReadICollection", BindingFlags.Instance | BindingFlags.NonPublic).MakeGenericMethod(elementType.type); if (!(bool)method.Invoke(this, new object[] { reader, list, elementType })) { return(null); } return(list); }
public override object Read <T>(ES3Reader reader) { var obj = ES3Reflection.CreateInstance(this.type); if (obj == null) { throw new NotSupportedException("Cannot create an instance of " + this.type + ". However, you may be able to add support for it using a custom ES3Type file. For more information see: http://docs.moodkie.com/easy-save-3/es3-guides/controlling-serialization-using-es3types/"); } // Make sure we return the result of ReadProperties as properties aren't assigned by reference. return(ReadProperties(reader, obj)); }
public override object Read <T>(ES3Reader reader) { if (members == null) { GetMembers(reader.settings.safeReflection); } object obj; string propertyName = reader.ReadPropertyName(); // If we're loading a derived type, use it's specific ES3Type. if (propertyName == ES3Type.typeFieldName) { return(ES3TypeMgr.GetOrCreateES3Type(reader.ReadType()).Read <T>(reader)); } // If we're loading a reference, load it. Else, create an instance. if (propertyName == ES3ReferenceMgrBase.referencePropertyName) { long id = reader.Read <long>(ES3Type_long.Instance); obj = ES3ReferenceMgrBase.Current.Get(id); if (obj == null) { // If an instance isn't already registered for this object, create an instance and register the reference. obj = ES3Reflection.CreateInstance(this.type); ES3ReferenceMgrBase.Current.Add((UnityEngine.Object)obj, id); } } else { reader.overridePropertiesName = propertyName; obj = ES3Reflection.CreateInstance(this.type); } // Iterate through each property in the file and try to load it using the appropriate // ES3Property in the members array. ReadProperties(reader, obj); return(obj); }