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));
        }