【发布时间】:2017-11-01 15:34:50
【问题描述】:
我使用CsvHelper 4.0.3。
我有一个这样定义的嵌套类:
private class CsvLine {
public string Solution;
public string Project;
public string DependsOnProject;
public string Weight;
public string DependsOnPackage;
public string PackageVersion;
}
我想使用 CsvHelper 解析的 .csv 文件具有以下字段名称:
Solution,Project,DependsOnProject,Weight,DependsOnPackage,PackageVersion
这是我的代码:
TextReader readFile = new StreamReader(dependenciesCsvFilePath);
var csvReader = new CsvReader(readFile);
IEnumerable<CsvLine> records = csvReader.GetRecords<CsvLine>();
根据文档here,上面的代码应该可以工作。
但是,当我检查 records 时,我看到了消息 No members are mapped for type 'ParentClass+CsvLine'。
我将CsvLine 的可访问性从private 更改为public,但这并没有什么不同。
我做错了什么?
编辑:我尝试取消嵌套 CsvLine 类并将其公开,但这也无济于事。
编辑:我以Nkosi suggested 进行了更改;但是,现在它说records 是一个空集合:“枚举没有产生任何结果”。我的 .csv 文件中肯定存在数据,因此集合不应为空。
以下是一些示例数据:
Solution,Project,DependsOnProject,Weight,DependsOnPackage,PackageVersion
FOD.sln,ABC.DEF,IMS.ABC,1,,
FOD.sln,ABC.DEF,IMS.DEF,1,,
FOD.sln,ABC.DEF,IMS.GHI,1,,
FOD.sln,ABC.DEF,IMS.JKL,1,,
编辑:已解决! Nkosi's 和 Panagiotis' 的答案相互补充。
【问题讨论】:
-
未嵌套时同样的错误?
-
字段与属性。
-
文件中的标题在哪里?如果没有标题,那么您将必须创建一个类映射以按索引映射
-
使用
.GetRecords<CsvLine>().ToArray()先加载数据,然后检查。即使有记录,我也看到调试器抱怨空枚举。顺便说一句,您使用的是哪个版本的 CsvHelper?它几乎每周都会更改版本 -
@PanagiotisKanavos 调用 ToArray() 成功了。谢谢!