Как создать класс сопоставления С# в csvhelper

У меня есть файл csv с 40 столбцами, и я хочу загрузить его в datatable с помощью csvhelper. После установки библиотеки я сделал следующее:

using (TextReader reader = File.OpenText(fileName)) {
   var csv = new CsvReader(reader);
   while (csv.Read()) {
       var farmID = csv.GetField(0);
       Console.WriteLine(farmID);
   }
}

и, как вы видите, у меня есть консольный оператор, и он отлично работает.

Однако, csvReader имеет конструктор, который принимает пользовательский класс для загрузки данных непосредственно на него.

Я пробовал это:

var record = csv.GetRecord<CSVFileDefinition>();

но я получил это исключение

No properties are mapped for type 'MyProjectName.CSVFileDefinition'.

потому что CSVFileDefinition - пустой класс.

Мой вопрос заключается в том, как заполнить этот класс.

Это библиотека:

http://joshclose.github.io/CsvHelper/

Большое спасибо

Обновление 2

Решение, которое работает для меня, это:

sealed class CSVFileDefinitionMap : CsvClassMap<CSVFileDefinition>
{
   public CSVFileDefinitionMap()
   {
      Map(m => m.FRM_ID).Name("FARM ID");
      Map(m => m.FRM_OWNER).Name("FARM OWNER ");
   }
}

class CSVFileDefinition
{
    public string FRM_ID { get; set; }
    public string FRM_OWNER { get; set; }
}

using (TextReader reader = File.OpenText(fileName)) {
    var csv = new CsvReader(reader);
    csv.Configuration.RegisterClassMap<CSVFileDefinitionMap>();
    while (csv.Read()) {
       var record = csv.GetRecord<CSVFileDefinition>();
    }
}

Ответы

Ответ 1

Кажется, что все, что вам нужно сделать, это добавить свойство к классу CSVFileDefinition для каждого имени столбца, которое вы ожидаете найти в CSV файле, и автоматическое сопоставление должно позаботиться об остальном.

Например, это должно вывести столбец идентификатора фермы, указав, что имя свойства соответствует имени столбца в CSV:

public class CSVFileDefinition
{
    public int FarmId { get; set; }

    //... add other columns here...
}