Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I write headers with spaces using CsvHelper?

Tags:

c#

csvhelper

I am using the CsvHelper library to generate a CSV file from an IEnumerable<Person>, where Person is a basic class.

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

I need to write quoted headers, i.e. instead of "DisplayName", the column in the resulting file should be "Display Name".

How can I do this?

like image 407
kjv Avatar asked Sep 25 '17 13:09

kjv


1 Answers

Create a ClassMap.

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 : ClassMap<Person>
{
    public PersonMap()
    {
        Map(m => m.DisplayName).Name("Display Name");
        Map(m => m.Age);
    }
}

Output:

Display Name,Age
one,1
two,2
like image 66
Josh Close Avatar answered Oct 18 '22 05:10

Josh Close