我使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的类,包含ID,Name,Age等字段.
但是,列的输出是我不喜欢的顺序(例如,ID不是第一个),我想指定哪个列是第一个,第二个,等等.
我相信我必须使用Mapping类,但是从文档中我无法弄明白.我希望能像课堂上的注释一样简单,但我猜不是.
有人可以帮忙吗?
谢谢.
sim*_*005 11
请访问网站的Mapping部分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.
}
}
Run Code Online (Sandbox Code Playgroud)
为此,您需要注册您的地图:
csv.Configuration.RegisterClassMap<MyNodeDPCountMap>();
Run Code Online (Sandbox Code Playgroud)
然后它将知道使用您在与NodeDPCount班级交互时注册的地图
您可以只使用 Index 属性(CsvHelper.Configuration.Attributes.IndexAttribute, Assembly: CsvHelper)。这里
public class Foo
{
[Index(0)]
public int Id { get; set; }
[Index(1)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)