public IEnumerable <object> MapTableToObjects(Type type, string[][] table, ColumnIndexToPropertyNameMapping propertiesMapping) { var result = new List <object>(); foreach (string[] row in table) { result.Add(row.MapToObjectProperties(type, propertiesMapping)); } result.TrimExcess(); return(result); }
private ColumnIndexToPropertyNameMapping CreatePropertiesMapping(Type type, string[][] table) { if (this.numberOfRowsToSkip < 1) { throw new ApplicationException("This CSV is not supposed to have header row. Current method is not applicable in this case."); } var mappings = new ColumnIndexToPropertyNameMapping(); var header = table[0]; int headerLength = header.Length; var properties = type.GetProperties() .Where(p => Attribute.IsDefined(p, typeof(CsvColumnAttribute))); foreach (var property in properties) { string columnName = this.GetColumnNameInTable(property); if (!string.IsNullOrEmpty(columnName)) { int columnNumber = -1; for (int i = 0; i < headerLength; ++i) { if (string.Compare(header[i], columnName) == 0) { columnNumber = i; break; } } if (columnNumber >= 0) { mappings.Mapping.Add(property.Name, columnNumber); } } } return(mappings); }