I'm trying to read in a csv file with a Header 'EMAIL', however, I keep getting the CsvMissingFieldException thrown "Fields 'Email' do not exist in the CSV file".
I set up the CSVreader to handle-
csvReader.Configuration.IsHeaderCaseSensitive = false;
but I'm still getting the same issue. Does anyone know a work around? Or why the configuration isn't working?
In my Utilities class:
public static IEnumerable<T> CSVreader<T>(string fileName)
{
using (var fileReader = File.OpenText(fileName))
using (var csvReader = new CsvHelper.CsvReader(fileReader))
{
csvReader.Configuration.IsHeaderCaseSensitive = false;
csvReader.Configuration.RegisterClassMap<OptOutClassMap>();
while (csvReader.Read())
{
var record = csvReader.GetRecord<T>();
yield return record;
}
}
}
In my Class Map Class:
public string Email { get; set; }
public class CustomClassMap : CsvHelper.Configuration.CsvClassMap<CustomMap>
{
public override void CreateMap()
{
Map(m => m.Email);
}
}
It looks like you are not using the correct ClassMap. From your code above, the line:
csvReader.Configuration.RegisterClassMap<OptOutClassMap>();
should be:
csvReader.Configuration.RegisterClassMap<CustomClassMap>();
Your code when modified works as expected.
static void Main(string[] args)
{
var records = CSVreader<Record>("TextFile1.csv");
}
public class Record
{
public string Email { get; set; }
}
public class CustomClassMap : CsvHelper.Configuration.CsvClassMap<Record>
{
public override void CreateMap()
{
Map(m => m.Email);
}
}
public static IEnumerable<T> CSVreader<T>(string fileName)
{
using (var fileReader = File.OpenText(fileName))
using (var csvReader = new CsvHelper.CsvReader(fileReader))
{
csvReader.Configuration.IsHeaderCaseSensitive = false;
csvReader.Configuration.RegisterClassMap<CustomClassMap>();
while (csvReader.Read())
{
var record = csvReader.GetRecord<T>();
yield return record;
}
}
}