我正在学习C#和对象序列化。我需要将对象保存为.csv文件。我尝试了CsvHelper,但找不到我的问题的答案。
假设我有一个这样的对象:
public class Record
{
...
public List<string> Collection { get; set; }
...
}
如何使用CsvHelper将 Collection 的值与.sv文件中的其他原始类型一起存储在.csv文件中?
答案 0 :(得分:1)
默认情况下,CsvHelper
将忽略集合。但是,使用ClassMap
可以使用Index
来表示您希望将简单的字符串集合与其他属性一起输出。 (没有充分记录。)
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