Search code examples
c#csvhelper

CsvHelper : Writing List<string> to CSV


I want to know how to write a List to a CSV using CsvHelper. I have taken a look here.

I have the following properties in the CSV Class

public class CSV
{
    public int? Id { get; set; }
    public List<string> Header1 { get; set; }
    public string Header2 { get; set; }
    public string Header3 { get; set; }
    public string Header4 { get; set; }
    public long? Header5 { get; set; }
    public long? Header6 { get; set; }
    public long? Header7 { get; set; }
    public string Header8 { get; set; }
    public List<string> Header9 { get; set; }
    public List<string> Header10 { get; set; }
    public List<string> Header11 { get; set; }
}

Writing to the CSV

var records = new List<CSV>
{
    new CSV { Header1 = new List<string>{ "value1", "value2" } }
};

using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(records);
}

The end result should look like this

Header1
value1,value2

Any help would be appreciated.


Solution

  • I'm guessing you are looking for something like this. This will create a comma separated string from the Header1 list.

    public class Program
    {
        static void Main(string[] args)
        {        
            var records = new List<CSV>
            {
                new CSV { Id = 1, Header1 = new List<string>{ "value1", "value2" } }
            };
    
            using (var csv = new CsvWriter(Console.Out, CultureInfo.InvariantCulture))
            {
                csv.Context.RegisterClassMap<CSVMap>();
                csv.WriteRecords(records);
            }
    
            Console.ReadKey();
        }
    }
    
    public class CSVMap : ClassMap<CSV>
    {
        public CSVMap()
        {
            AutoMap(CultureInfo.InvariantCulture);
            Map(m => m.Header1).Convert(args => string.Join(",", args.Value.Header1)).Index(0);
        }
    }
    
    public class CSV
    {
        public int? Id { get; set; }
        public List<string> Header1 { get; set; }
    }
    

    Giving you an output of

    Id,Header1
    1,"value1,value2"