The following had to be removed from UE v4.0c to compile with IL2CPU... /// /// Reads an array of items of the specified type from the current stream. /// /// The data type of the items to read. /// The number of items to read. /// public T[] ReadObjectArray(int count) { List objects = new List(); for (int i = 0; i < count; i++) { objects.Add((T)ReadObject(typeof(T))); } return objects.ToArray(); } public T[] ReadStructArray (int count) where T: struct { System.Collections.Generic.List ts = new System.Collections.Generic.List (); for (int i = 0; i < count; i++) { T obj = ReadStruct (); ts.Add (obj); } return ts.ToArray (); } // TODO: ReadStruct needs to be fixed. It has a lot of problems. public T ReadStruct () where T : struct { Type objectType = typeof(T); object value = objectType.Assembly.CreateInstance (objectType.FullName); System.Reflection.FieldInfo[] fis = (objectType.GetFields (System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)); foreach (System.Reflection.FieldInfo fi in fis) { Type fieldType = fi.FieldType; object fieldValue = ReadObject (fieldType); fi.SetValue (value, fieldValue); } return (T)value; } public T ReadObject () where T : class { Type objectType = typeof(T); T value = (T)objectType.Assembly.CreateInstance (objectType.FullName); System.Reflection.FieldInfo[] fis = (objectType.GetFields (System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)); foreach (System.Reflection.FieldInfo fi in fis) { Type fieldType = fi.FieldType; object fieldValue = ReadObject(fieldType); fi.SetValue (value, fieldValue); } return value; } public object ReadObject(Type objectType) { if (objectType == typeof(Byte)) { return ReadByte(); } else if (objectType == typeof(SByte)) { return ReadSByte(); } else if (objectType == typeof(String)) { return ReadLengthPrefixedString(); } else if (objectType == typeof(Char)) { return ReadChar(); } else if (objectType == typeof(Char[])) { } else if (objectType == typeof(Single)) { return ReadSingle(); } else if (objectType == typeof(Double)) { return ReadDouble(); } else if (objectType == typeof(Int16)) { return ReadInt16(); } else if (objectType == typeof(Int32)) { return ReadInt32(); } else if (objectType == typeof(Int64)) { return ReadInt64(); } else if (objectType == typeof(UInt16)) { return ReadUInt16(); } else if (objectType == typeof(UInt32)) { return ReadUInt32(); } else if (objectType == typeof(UInt64)) { return ReadInt64(); } else if (objectType == typeof(DateTime)) { return ReadDateTime(); } object value = objectType.Assembly.CreateInstance (objectType.FullName); System.Reflection.FieldInfo[] fis = (objectType.GetFields (System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)); foreach (System.Reflection.FieldInfo fi in fis) { Type fieldType = fi.FieldType; object fieldValue = ReadObject (fieldType); fi.SetValue (value, fieldValue); } return value; }