【问题标题】:Can CsvHelper map headers to two different class instances?CsvHelper 可以将标头映射到两个不同的类实例吗?
【发布时间】:2021-04-19 07:51:29
【问题描述】:

我们正在考虑从相当老的 LinqToCsv 切换到 CsvHelper。我们需要考虑的一个实例是,我们有一个 CSV 文件,其中的列需要映射到两个不同的类。

URL, MerchantId, ISBN, InternalCode
"https://blahblah.com", 1, 9781234567890, 1234

URLMerchantId 需要映射到 MerchantProductRelBO 的实例,但 ISBNInternalCode 需要映射到 ProductBO 的实例。

这可以通过创建自定义映射来完成,还是我需要按照https://joshclose.github.io/CsvHelper/getting-started/#reading-a-csv-file 中的描述手动读取文件?

【问题讨论】:

    标签: csvhelper


    【解决方案1】:

    如果将它们都添加到另一个类中,则无需手动阅读。

    public class Foo
    {
        public MerchantProductRelBO MerchantProduct { get; set; }
        public ProductBO ProductBO { get; set; }
    }
    
    using (var reader = new StringReader("URL,MerchantId,ISBN,InternalCode\nhttps://blahblah.com,1,9781234567890,1234"))
    using (var csv = new CsvHelper.CsvReader(reader, CultureInfo.InvariantCulture))
    {
        var records = csv.GetRecords<Foo>();
    }
    

    否则,我认为您需要手动阅读。

    using (var reader = new StringReader("URL,MerchantId,ISBN,InternalCode\nhttps://blahblah.com,1,9781234567890,1234"))
    using (var csv = new CsvHelper.CsvReader(reader, CultureInfo.InvariantCulture))
    {
        var merchantProducts = new List<MerchantProductRelBO>();
        var productBOs = new List<ProductBO>();
    
        csv.Read();
        csv.ReadHeader();
    
        while (csv.Read())
        {
            merchantProducts.Add(csv.GetRecord<MerchantProductRelBO>());
            productBOs.Add(csv.GetRecord<ProductBO>());
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2022-12-07
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多