我在遗留项目上使用 CsvHelper (版本 7.1.0 ,如果可能的话,我宁愿暂时保留该版本)
我有一个具有不同数量属性的对象列表,我想将其保存为 csv。
例如:
var list = new List<dynamic>(){
{id=1, image1="xxx", state="ok"},
{id=2, image1="xxx", image2=yyy, state="ok"}
{id=3, image1="xxx", state="ok"}
}
编辑以澄清:我接收这些对象作为公开发布的 API 的一部分
客户可以决定发给我
{
{id=1, image1="xxx", state="ok"},
{id=2, image1="xxx", image2="yyy", state="ok"}
{id=3, image1="xxx", state="ok"}
}
而另一个可以发送
{
{id=1, MyImage1="xxx", state="ok"},
{id=2, MyImage1="xxx", MyImage2="yyy", state="ok"}
{id=3, MyImage1="xxx", MyComment="please discard", state="ok"}
}
这就是为什么我(至少我认为)需要使用某种动态或 ExpandoObject
最简单的情况是所有记录都具有相同的属性,但我遇到了特定边缘情况的问题
当我写的时候:
var csv = new CsvWriter(writer);
csv.WriteRecords(list);
标头基于列表中的第一项,因此在我的情况下,由于缺少某些标头,csv 会变得混乱,我会得到类似的内容:
id |
image1 |
state |
|
1 |
xxx |
|
ok |
2 |
xxx |
yyy |
ok |
3 |
xxx |
|
ok |
我想要的是以下内容:
id |
image1 |
image2 |
state |
1 |
xxx |
|
ok |
2 |
xxx |
yyy |
ok |
3 |
xxx |
|
ok |
我需要保持标题的顺序和列表的排序。
到目前为止,我拥有的最佳解决方案是识别具有最高属性计数的项目,并将具有空值的缺失属性添加到所有其他项目...
有没有更明智的方法来实现我的需求?
Thanks!