如何将C#映射类创建为csvhelper

Agn*_*lec 21 .net c# csv csvhelper

我有一个包含40列的csv文件,我想使用csvhelper将其加载到数据表中.安装库后,我这样做了:

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

如你所见,我有一个控制台声明,它完美无缺.

但是,csvReader有一个构造函数,它使用自定义类将数据直接加载到它.

我试过这个:

var record = csv.GetRecord<CSVFileDefinition>();
Run Code Online (Sandbox Code Playgroud)

但我得到了这个例外

No properties are mapped for type 'MyProjectName.CSVFileDefinition'.
Run Code Online (Sandbox Code Playgroud)

因为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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您似乎需要做的就是为CSVF文件中的每个列名添加一个属性到CSVFileDefinition类,并且自动映射应该处理其余的事情.

例如,如果属性名称与CSV中的列名称匹配,则应该引入服务器场ID列:

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

    //... add other columns here...
}
Run Code Online (Sandbox Code Playgroud)

  • 我得到了这个异常`字段'FRM_ID'在CSV文件中不存在 (3认同)
  • 我已经成功地使用了这种方法,但是当属性不是字符串并且数据单元格为空时出现问题。例如,我有一个小数属性,但它不起作用。 (2认同)