You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CSV Helper将原始CSV行数据填充到实体属性中?

解决方法

首先,先取消Data类中OriginalRecord属性的注释,确保它可以被赋值:

public class Data
{
   public int Id { get; set; }
   public string Name { get; set; }
   public string? OriginalRecord { get; set; } // 启用该属性
}

下面提供两种可行的实现方案:

方式一:遍历记录时手动获取原始行

由于GetRecords<T>是延迟执行的,你可以在遍历过程中通过csv.Context.Parser.RawRecord获取当前行的原始文本,再赋值给OriginalRecord:

using (var reader = new StreamReader("file.csv"))
using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false }))
{
    var records = new List<Data>();
    while (csv.Read())
    {
        var record = csv.GetRecord<Data>();
        record.OriginalRecord = csv.Context.Parser.RawRecord;
        records.Add(record);
    }
}

方式二:使用自定义类映射(ClassMap)

通过创建自定义ClassMap,在映射流程中注入原始行数据,这种方式更贴合CsvHelper的映射规范:

public class DataMap : ClassMap<Data>
{
    public DataMap()
    {
        Map(m => m.Id).Index(0);
        Map(m => m.Name).Index(1);
        Map(m => m.OriginalRecord).Convert(args => args.Context.Parser.RawRecord);
    }
}

之后在读取CSV时注册该映射即可:

using (var reader = new StreamReader("file.csv"))
using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false }))
{
    csv.Context.RegisterClassMap<DataMap>();
    var records = csv.GetRecords<Data>().ToList();
}

两种方案都能实现将每条记录对应的原始CSV行填充到OriginalRecord属性中,可根据代码风格选择合适的方式。

内容的提问来源于stack exchange,提问作者Peter Poulsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:07