使用 CSVHelper 自定义 header 格式

Custom header format with CSVHelper

我需要用驼峰式 header 写一个 CSV 文件。

假设我们有这个 class

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

和下面的代码

public void Main()
{
    var p = new Person { Id = 1, FirstName = "John", LastName = "Doe" };
    
    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture, true))
    {
        csv.WriteHeader<Person>();
        csv.NextRecord();
        csv.WriteRecord(p);
        csv.Flush();
        var newRecord = writer.ToString();
        newRecord.Dump();
    }
}

这将输出以下内容

Id,FirstName,LastName
1,John,Doe

我希望header采用驼峰式格式

id,firstName,lastName
1,John,Doe

最后一件重要的事情是,我不知道 objects 所以 ClassMaps 或属性不是一个选项。

有没有办法配置 header 如何使用 CSVHelper 格式化?

使用 DefaultClassMap<T> 这应该适用于您提供的任何 class。

public void Main()
{
    var p = new Person { Id = 1, FirstName = "John", LastName = "Doe" };
    
    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture, true))
    {
        var map = new DefaultClassMap<Person>();
        
        map.AutoMap(CultureInfo.InvariantCulture);
        
        foreach (var memberMap in map.MemberMaps)
        {
            memberMap.Data.Names.Add(System.Text.Json.JsonNamingPolicy.CamelCase.ConvertName(memberMap.Data.Member.Name));
        }
        
        csv.Context.RegisterClassMap(map);
        
        csv.WriteHeader<Person>();
        csv.NextRecord();
        csv.WriteRecord(p);
        csv.Flush();
        var newRecord = writer.ToString();
        newRecord.Dump();
    }
}

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}