Exemple #1
0
        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));
        }
Exemple #2
0
        /*
         *  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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #8
0
        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);
        }