c# - 用 List 写一个对象字段到 CSV
问题描述
我正在学习 C# 和对象序列化。我需要将对象保存在 .csv 文件中。我尝试了 CsvHelper但找不到我的问题的答案。
假设我有一个像这样的对象:
public class Record
{
...
public List<string> Collection { get; set; }
...
}
如何使用CsvHelper将Collection的值与 csv 文件记录中的其他原始类型一起存储在 .csv 文件中?
解决方案
默认情况下会忽略集合CsvHelper
。但是,ClassMap
您可以使用aIndex
来表示您想要一个简单的字符串集合与其他属性一起输出。(没有很好的记录。)
public class Program
{
public static void Main(string[] args)
{
var records = new List<Record>
{
new Record { Id = 1, Name = "Record1", Collection = new List<string>{"First", "Second", "Third"}},
new Record { Id = 2, Name = "Record2", Collection = new List<string>{"First", "Second"}},
};
using (var csv = new CsvWriter(Console.Out))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.RegisterClassMap<RecordMap>();
csv.WriteRecords(records);
}
Console.ReadKey();
}
}
public class RecordMap : ClassMap<Record>
{
public RecordMap()
{
Map(m => m.Id);
Map(m => m.Name);
Map(m => m.Collection).Index(3);
}
}
public class Record
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> Collection { get; set; }
}
输出:
1,Record1,First,Second,Third
2,Record2,First,Second
如果您知道集合中的最大项目数,您还可以设置结束索引并CsvHelper
为每个集合项目创建标题。
public class RecordMap : ClassMap<Record>
{
public RecordMap()
{
Map(m => m.Id);
Map(m => m.Name);
Map(m => m.Collection).Index(3, 5);
}
}
删除csv.Configuration.HasHeaderRecord = false;
,现在它还会为您打印标题记录。输出:
Id,Name,Collection1,Collection2,Collection3
1,Record1,First,Second,Third
2,Record2,First,Second
推荐阅读
- javascript - 为什么当我使用 import-export 时 html 不运行我导入的 javascript
- android - 解析平台在Android中使用join
- java - java -version 在 `jre1.8/lib/i386/server/libjvm.so' 返回缺少的 `server' JVM
- kubernetes - 如何连接在 k8s 集群中使用 helm 图表创建的 mongodb 副本集
- android - 如何在 Firebase 分析控制台上显示具有事件计数的用户属性值列表
- c# - 在构造函数调用中设置属性的值如何与 JsonProperty 一起使用?
- c# - 这两种使用foreach的方式有区别吗?
- coq - 如何消除表达式内部的析取?
- c# - 实体框架创建与现有实体相关的新实体
- angular - 即使在 angular 2 项目中成功输出后,我也会收到错误消息。为什么这样?