Как создать класс сопоставления С# в 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...
}