csvhelper - CSVHelper:一行,多个类图
问题描述
我有一排充当多个类的组合。此后,这些类代表一个嵌套的聚合对象。例如:
(header)product_name、product_sku、product_description、promotion_date、promotion_price
(数据)xxx,1234,“伟大的产品”,202 年 12 月 4 日,3.41 美元
我想读取 Product 对象中的前 3 个 cols,然后将另外两个读取到 Promotion 对象中。我可以用两张地图做到这一点吗?我可以在 classMap 中的两个类之间创建视图吗?
解决方案
你可以用几张地图来做
public class Program
{
static void Main(string[] args)
{
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
writer.WriteLine("product_name,product_sku,product_description,promotion_date,promotion_price");
writer.WriteLine("xxx,1234,great product,12/4/202,$3.41");
writer.Flush();
stream.Position = 0;
csv.Configuration.RegisterClassMap<TransactionMap>();
var records = csv.GetRecords<Transaction>().ToList();
}
}
}
public class TransactionMap : ClassMap<Transaction>
{
public TransactionMap()
{
References<ProductMap>(m => m.Product);
References<PromotionMap>(m => m.Promotion);
}
}
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Map(m => m.Name).Name("product_name");
Map(m => m.Sku).Name("product_sku");
Map(m => m.Description).Name("product_description");
}
}
public class PromotionMap : ClassMap<Promotion>
{
public PromotionMap()
{
Map(m => m.Date).Name("promotion_date");
Map(m => m.Price).Name("promotion_price");
}
}
public class Transaction
{
public Product Product { get; set; }
public Promotion Promotion { get; set; }
}
public class Product
{
public string Name { get; set; }
public string Sku { get; set; }
public string Description { get; set; }
}
public class Promotion
{
public DateTime Date { get; set; }
public string Price { get; set; }
}
或者一张地图
public class Program
{
static void Main(string[] args)
{
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
writer.WriteLine("product_name,product_sku,product_description,promotion_date,promotion_price");
writer.WriteLine("xxx,1234,great product,12/4/202,$3.41");
writer.Flush();
stream.Position = 0;
csv.Configuration.RegisterClassMap<TransactionMap>();
var records = csv.GetRecords<Transaction>().ToList();
}
}
}
public class TransactionMap : ClassMap<Transaction>
{
public TransactionMap()
{
Map(m => m.Product.Name).Name("product_name");
Map(m => m.Product.Sku).Name("product_sku");
Map(m => m.Product.Description).Name("product_description");
Map(m => m.Promotion.Date).Name("promotion_date");
Map(m => m.Promotion.Price).Name("promotion_price");
}
}
public class Transaction
{
public Product Product { get; set; }
public Promotion Promotion { get; set; }
}
public class Product
{
public string Name { get; set; }
public string Sku { get; set; }
public string Description { get; set; }
}
public class Promotion
{
public DateTime Date { get; set; }
public string Price { get; set; }
}
推荐阅读
- assembly - 为什么“sub esp, 96”、“lea eax, [esp+16]”和“mov [esp+4], eax”?(asm intel 语法)
- javascript - 为每个选定的行获取表格的单元格值?
- r - ctree_control 中的错误...未使用的参数...在 R 中
- php - 带有 Apache Mod-Rewrite 的友好 URL
- python - pyodbc 模块在 unix 本地安装
- c# - 图片存在但不显示
- gradle - 如何在 Gradle Kotlin DSL 中定义 Jacoco 报告聚合?
- java - 为什么 "5".equals(5) 不会评估为真?他们不是都一样,都是5吗?
- tensorflow - 为英特尔至强黄金 6148 构建张量流
- c# - 在 XAML 语句上使用 VS 2017 时出现编码调试错误