我正在使用CSVMapper输出字典中的对象:
using (TextWriter writer = new StreamWriter($"somefile.csv"))
{
var csvDP = new CsvWriter(writer);
csvDP.WriteHeader<NodeDPCount>();
csvDP.NextRecord();
foreach (NodeDPCount dpItem in dp.Values)
{
csvDP.WriteRecord(dpItem);
csvDP.NextRecord();
}
}
这是一个简单的类,包含ID,Name,Age等字段。
然而,列的输出是我不喜欢的顺序(例如ID不是第一个),我想指定哪个列是第一个,第二个等等。
我相信我必须使用Mapping类,但是从文档中我无法弄明白。我希望像课堂上的注释那样简单,但我猜不是。
有人可以帮忙吗?
感谢。
答案 0 :(得分:10)
请查看CSVHelper
(http://joshclose.github.io/CsvHelper/2.x/)网站的“映射”部分
具体做法是:
按索引映射时,指定要用于该属性的CSV列的索引
因此,您必须为NodeDPCount
类指定一个映射类,告诉它使用哪个索引作为哪些记录。
public sealed class MyNodeDPCountMap : CsvClassMap<NodeDPCount>
{
public MyNodeDPCountMap()
{
Map( m => m.Id ).Index( 0 );
Map( m => m.Name ).Index( 1 );
// etc.
}
}
为此,您需要注册地图:
csv.Configuration.RegisterClassMap<MyNodeDPCountMap>();
然后它会知道使用您在与NodeDPCount
班级互动时注册的地图
答案 1 :(得分:2)
你可以只使用索引属性(CsvHelper.Configuration.Attributes.IndexAttribute,Assembly: CsvHelper)。 here
public class Foo
{
[Index(0)]
public int Id { get; set; }
[Index(1)]
public string Name { get; set; }
}