设置CSVHelper的列顺序

Nei*_*ker 7 c# csvhelper

我使用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班级交互时注册的地图

  • 我必须使用 `ClassMap&lt;NodeDPCount&gt;` 而不是 `CsvClassMap&lt;NodeDPCount&gt;` (3认同)

Tij*_*ohn 9

您可以只使用 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)