CsvHelper - 用空格写标题

时间:2017-09-25 13:19:20

标签: csvhelper

我正在使用CsvHelper库从IEnumerable<生成CSV文件。人>,其中Person是基本类。

public class Person
{
    public string DisplayName { get; set; }
    public int Age { get; set; }
}

我需要编写带引号的标题,即代替DisplayName,生成的文件中的列应为“显示名称”。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

创建CsvClassMap

void Main()
{
    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    using (var reader = new StreamReader(stream))
    using (var csv = new CsvWriter(writer))
    {
        var records = new List<Person>
        {
            new Test { DisplayName = "one", Age = 1},
            new Test { DisplayName = "two", Age = 2 },
        };

        csv.Configuration.RegisterClassMap<PersonMap>();
        csv.WriteRecords(records);

        writer.Flush();
        stream.Position = 0;

        Console.WriteLine(reader.ReadToEnd());
    }
}

public class Person
{
    public string DisplayName { get; set; }
    public int Age { get; set; }
}

public sealed class PersonMap : CsvClassMap<Person>
{
    public PersonMap()
    {
        Map(m => m.DisplayName).Name("Display Name");
        Map(m => m.Age);
    }
}

输出:

Display Name,Age
one,1
two,2

答案 1 :(得分:0)

我没有带有解决方法的标题,所以我做了这个快速的解决方法:

foreach (var property in typeof(MyCsvClass).GetProperties())
{
  csvWriter.WriteField(property.Name.Replace('_', ' '));
}
csvWriter.NextRecord();
csvWriter.WriteRecords(models);

这需要属性名称并用空格替换下划线,所以我可以用下划线而不是空格命名属性,并且它正确映射。

但是,它要求您在 CsvWriter 上使用 HasHeaderRecord = false 选项。