public IDataCenter Read(string className, BigEndianReader reader) { Type type = m_Class.GetType(); if (type.GetInterface("IDataCenter") == null) { throw new Exception("Unknow type"); } foreach (GameDataField field in m_Fields) { field.Read(className, reader); } ConstructorInfo[] constructors = type.GetConstructors(); ParameterInfo[] constructorParameters = constructors[1].GetParameters(); List <object> parameters = new List <object>(); foreach (ParameterInfo parameter in constructorParameters) { if (parameter.Name == "gameDataFileAccessor") { parameters.Add(m_GameDataFileAccessor); continue; } foreach (GameDataField field in m_Fields) { if (parameter.Name.ToLower() == field.Name.ToLower()) { parameters.Add(field.Value); break; } } } object result = constructors[1].Invoke(parameters.ToArray()); return((IDataCenter)result); }