【问题标题】:Map different Column Header Names to a single field in the C# entity class using CsvHelper使用 CsvHelper 将不同的列标题名称映射到 C# 实体类中的单个字段
【发布时间】:2020-10-27 15:57:00
【问题描述】:

我有几个不同的 csv 文件结构,每个结构在第 2 列上都有不同的列标题名称,需要将此列值映射到 c# 实体类上的字段,我想知道如何使用 CsvHelper 实现这一点。

例如:一个文件的列标题为“ColumnXYZ”,另一个文件的列标题为“ColumnABC”,使用 CsvHelper 必须首先检查文件中存在哪个列标题名称,然后将列值映射到实体的“FieldQwe”。两个列标题名称都不会存在于单个文件中。因此,寻找有关处理这种情况的任何想法。

我可以在实体字段上使用这样的东西,这样 AutoMap 就可以正常工作了吗?

[名称("ColumnABC", "ColumnXYZ")]
公共字符串 Field1{ 获取;放; }

【问题讨论】:

  • 是的,我相信您的编辑回答了您自己的问题。
  • 好的,谢谢。会试一试的。

标签: csvhelper


【解决方案1】:

您可以在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");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多