编写时转换或过滤CsvHelper中的成员

Convert or filter members in CsvHelper when writing

想象一下我有一个这样的class

public class DataGroup 
{
    public string DataA { get; set; }
    public string DataB { get; set; }
    public bool Updated { get; set; }
}

DataA需要写一个空字符串或者"N/A"Updated == false需要写DataBUpdated == true需要写一个实际值;

这可以用 CsvHelper 实现吗?

类型转换似乎不起作用,因为它只访问最终成员,因此无法读取 Updated 的值。

MapMember class 有一个 Conversion 方法,但它似乎只适用于阅读。

if(Updated == false)
{
    DataA = "N/A";
    DataB = "N/A";
}
else
{
     DataA = "Actual Information";
     DataB = "Actual Information";
}

您可以将类型设置为空,而不是“N/A”

您可以使用Convert方法。此方法可能有点令人困惑,因为它可以 ConvertFromStringConvertToString,具体取决于您的使用方式。

ConvertFromString RowCsvReader

结合使用
Map(m => m.DataA).Convert(m => m.Row.GetField("DataA") + m.Row.GetField("Updated"));

ConvertToString ValueCsvWriter

结合使用
Map(m => m.DataA).Convert(m => m.Value.DataA + m.Value.Updated);

你想要ConvertToString,所以你的ClassMap可能是这样的。

public class DataGroupMap : ClassMap<DataGroup>
{
    public DataGroupMap()
    {
        Map(m => m.DataA).Convert(m =>
        {
            if (m.Value.Updated) { return m.Value.DataA; }
            return "N/A";
        });
        Map(m => m.DataB).Convert(m =>
        {
            if (m.Value.Updated) { return m.Value.DataB; }
            return "N/A";
        });
        Map(m => m.Updated);
    }
}