public List <ReadUserModel> Parse(string filePath, FilesImportStatistic importStatistic) { using (var csv = new CsvReader(new StreamReader(filePath), _configuration)) { csv.Context.RegisterClassMap(_map); var users = new List <ReadUserModel>(); csv.Read(); csv.ReadHeader(); csv.ValidateHeader(typeof(UserFileModel)); while (csv.Read()) { string currentCsvRow = csv.Context.Parser.RawRecord; try { UserFileModel user = csv.GetRecord <UserFileModel>(); users.Add(new ReadUserModel(user, currentCsvRow)); importStatistic.TotalCount++; } catch (Exception ex) { string message = $"Can't parse user. Line: '{currentCsvRow}.' {ex.Message}"; importStatistic.Errors.Add(message); //LogHolder.MainLog.Error(ex, message); } } return(users); } }
static void Main(string[] args) { var config = new ConfigurationBuilder() .AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true) .Build(); var options = config.GetSection("ParcerOptions").Get <ParcerOptions>(); string filePath = "DevTestFakeData.csv"; var fileImportStat = new FilesImportStatistic(filePath); var parser = new CsvUsersParser(options.ColumnMaps); var users = parser.Parse(filePath, fileImportStat); PrintJson(users); PrintJson(fileImportStat); }