覆盖集合列名称

时间:2021-06-08 22:56:39

标签: csvhelper

我有一个非常简单的类,我想写入 CSV。例如,它包含一个“列表”。我有映射工作,如果我添加一个 map 语句来提供索引的名称(例如 'Index(2, 5).Name("The List ")'),它就可以工作。但是,列名会出现“列表 1、列表 2、列表 3、列表 4”。

我看到一个旧帖子说无法覆盖这些名称。这还是真的吗?我试过玩“.Convert”但没有成功。我在文档中看到了我无法找到的示例参考。

归根结底,我想要的只是一张能上这样一堂课的地图:

    public class SimpleListClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<int> TheCollection { get; set; }
    }

让我覆盖“TheCollection”的列名。

非常感谢任何/所有帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为不可能以您想要的方式覆盖名称。我知道让它工作的唯一方法是手动写出标题。

void Main()
{
    var records = new List<SimpleListClass>
    {
        new SimpleListClass { Id = 1, Name = "one", TheCollection = new List<int>{1,2,3,4} },
    };
    
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        HasHeaderRecord = false
    };

    //using (var writer = new StreamWriter("path\\to\\file.csv"))
    using (var csv = new CsvWriter(Console.Out, config))
    {
        csv.Context.RegisterClassMap<SimpleLIstClassMap>();
        
        csv.WriteField("Id");
        csv.WriteField("Name");
        
        for (int i = 1; i < 5; i++)
        {
            csv.WriteField($"Pressure {i} (kPa)");
        }
        
        csv.NextRecord();
        
        csv.WriteRecords(records);
    }
}

public class SimpleListClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<int> TheCollection { get; set; }
}

public class SimpleLIstClassMap : ClassMap<SimpleListClass>
{
    public SimpleLIstClassMap()
    {
        Map(x => x.Id);
        Map(x => x.Name);
        Map(x => x.TheCollection).Index(2, 5);
    }
}