有没有一种简单的方法可以将 CSV 文件中记录的行号映射到 POCO?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以将 CSV 文件中记录的行号映射到 POCO?【英文标题】:Is there a simple way to map the row number of the record in the CSV file to a POCO? 【发布时间】:2021-09-25 03:58:16 【问题描述】:我有一个流程,可以导入许多具有不同定义的 CSV 文件,并根据各种逻辑将它们转换为相应数量的离散 POCO 类型。为了更好的排查问题,我现在需要自己在POCO上记录行号。因此,我为我的所有 POCO 创建了一个基类,并使用一个属性来处理这个问题。
根据this discussion,可以通过构造ClassMap
将CSV 文件记录的行/行号映射到POCO。但是,我目前正在使用应用于我的 POCO 中每个属性的IndexAttribute
来执行映射。由于我有许多 POCO,并且映射目前运行良好,我宁愿不必为每个 POCO 创建ClassMap
s(不仅维护起来更复杂且 IMO 更棘手,而且还需要更多努力)。
是否有一个简单的替代方案,最好使用属性来实现行/行号 => POCO 属性映射?我查看了 CSVHelper 存储库中的属性,但没有看到任何相关的内容。
【问题讨论】:
您是否考虑过具有行索引的 poco 的基类? 【参考方案1】:您可以使用TypeConverter
属性。
void Main()
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
HasHeaderRecord = false,
MissingFieldFound = null
;
using (var reader = new StringReader("1,One\n2,Two"))
using (var csv = new CsvReader(reader, config))
var records = csv.GetRecords<Foo>().Dump();
public class Foo
[Index(0)]
public int Id get; set;
[Index(1)]
public string Name get; set;
[TypeConverter(typeof(RowNumberConverter))]
public int RowNumber get; set;
public class RowNumberConverter : DefaultTypeConverter
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
return row.Context.Parser.Row;
【讨论】:
以上是关于有没有一种简单的方法可以将 CSV 文件中记录的行号映射到 POCO?的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法可以将 BigQuery 中的行转换为 JSON?
有没有一种有效的方法可以附加到现有的 csv 文件而不在 R 中重复?