首页 > 解决方案 > 编写时在 CsvHelper 中转换或过滤成员

问题描述

想象一下我有这样的课

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

我需要写一个空字符串或"N/A"for DataAand DataBwhen Updated == false,以及实际值 when Updated == true;

这对 CsvHelper 可行吗?

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

该课程有一种Conversion方法,MapMember但似乎仅适用于阅读。

标签: c#.netcsvcsvhelper

解决方案


您可以使用该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);
    }
}

推荐阅读