首页 > 解决方案 > CsvHelper - 由于括号,无法将类对象名称与 csv 标头名称匹配

问题描述

在带有 .NET Core 2.2 的 Visual Studio 2019 中使用 CsvHelper。

我的 csv 文件的标题名称中包含括号。我无法控制此源 csv 文件的内容。

根据https://joshclose.github.io/CsvHelper/getting-started上的入门文档,如果您的类属性名称与 csv 文件头名称匹配,我们无需任何配置即可读取该文件。但是括号不能用于 C# 中的类属性名称。

有没有办法解决这个问题,所以我可以使我的类属性名称与包含括号的标题名称匹配?如果没有,我如何指导 Csvhelper 正确处理这个问题?该文档仅涉及调整小写与大写的名称。

标签: c#csvhelper

解决方案


文档中:

使用配置PrepareHeaderForMatch,我们能够更改标头匹配对属性名称进行的方式。标头和属性名称都通过PrepareHeaderForMatch 函数运行。当读者需要找到要为标题设置的属性时,它们现在将匹配。您可以使用此功能执行其他操作,例如删除空格或其他字符。

所以(如果只需要去掉括号就可以匹配,否则,做你自己的逻辑):

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader))
{    
    csv.Configuration.PrepareHeaderForMatch = (string header, int index) => 
        header.Replace("(","").Replace(")","");
    var records = csv.GetRecords<Foo>();
}

推荐阅读