csvhelper - 使用 CsvHelper 将不同的列标题名称映射到 C# 实体类中的单个字段
问题描述
我有几个不同的 csv 文件结构,每个结构在第 2 列上都有不同的列标题名称,并且需要将此列值映射到 c# 实体类上的字段,并且想知道如何使用 CsvHelper 来实现这一点。
例如:一个文件的列标题为“ColumnXYZ”,另一个文件的列标题为“ColumnABC”,使用 CsvHelper 必须首先检查文件中存在哪个列标题名称,然后将列值映射到“FieldQwe”的一个实体。两个列标题名称都不会存在于单个文件中。因此,寻找有关处理这种情况的任何想法。
我可以在实体字段上使用这样的东西,这样 AutoMap 就可以正常工作了吗?
[Name("ColumnABC", "ColumnXYZ")]
public string Field1{ get; 放; }
解决方案
您可以在https://joshclose.github.io/CsvHelper/examples/configuration/class-maps找到一些配置示例
void Main()
{
using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Configuration.RegisterClassMap<FooMap>();
var records = csv.GetRecords<Foo>();
}
}
public class Foo
{
public int Id { get; set; }
public string Name { get set; }
}
public sealed class FooMap : ClassMap<Foo>
{
public FooMap()
{
Map(m => m.Id).Name("TheId", "Id");
Map(m => m.Name).Name("TheName", "Name");
}
}
推荐阅读
- php - 我在查询的 Where 语句中有 AND 运算符,我怎么知道哪个语句没有返回
- rust - 结构内的对象需要不可变和可变引用
- c - 从两个文件中逐行合并文本
- javascript - Laravel 和 Livewire:组件更改时如何执行 javascript 函数?
- r - 通过迭代功能一步导入和合并数据集?
- reactjs - Webpack 收集错误的 src 路径
- cassandra - 在 cassandra 中使用 sstableloader 恢复数据时出现错误
- node.js - 将文件从 HTML 表单发送到外部 API(如何在节点 fetch/axios 中制作 curl file=@...)
- javascript - 反应日期选择器无法显示日期时间
- javascript - 当我按下手风琴时砌体不工作(高度没有增加)