加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – CSV-Helper无法转换bool值

发布时间:2020-12-15 18:25:25 所属栏目:百科 来源:网络整理
导读:我开始使用 CSV Helper – 一个出色的小帮手,适合你的日常工作 – 很棒的东西! 我现在正在努力的一个项目是班级地图 – 我有一个小班级 public class SimpleClass{ public int ID { get; set; } public string Name { get; set; } public decimal Percentag
我开始使用 CSV Helper – 一个出色的小帮手,适合你的日常工作 – 很棒的东西!

我现在正在努力的一个项目是班级地图 – 我有一个小班级

public class SimpleClass
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Percentage { get; set; }
    public bool IsValid { get; set; }
}

为了导出到CSV,我想用Is替换IsValid值true,用no替换False;为此,我创建了一个类映射:

public class SimpleClassMap : CsvClassMap<SimpleClass>
{
    public override void CreateMap()
    {
        Map(x => x.ID).Index(0);
        Map(x => x.Name).Index(1);
        Map(x => x.Percentage).Index(2);
        Map(x => x.IsValid).Index(3)
                           .TypeConverterOption(true,"yes")
                           .TypeConverterOption(false,"no");
    }
}

现在在导出我的数据时,我正在使用该类映射:

CsvConfiguration config = new CsvConfiguration { Delimiter = ";",HasHeaderRecord = false,Quote = '"' };
config.RegisterClassMap<SimpleClassMap>();

using (MemoryStream stm = new MemoryStream())
using (var streamWriter = new StreamWriter(stm))
using (var csvWriter = new CsvWriter(streamWriter,config))
{
    csvWriter.WriteRecords(list);
    streamWriter.Flush();
}

不幸的是,当我检查所写的内容时,我发现我仍然是对或不对 – 不是我希望的是或否……

我在这里错过了什么?我正在使用从NuGet安装的CSV-Helper v2.5和.NET 4.0 / Visual Studio 2010.

解决方法

TypeConverterOption的布尔值重载仅在读取时使用.它允许您指定在读取时可用于true / false的多个值.所以你可以做1,“真实”,“是”等.

目前,写作时唯一的方法是创建自定义类型转换器.

public class MyBooleanConverter : DefaultTypeConverter
{
    public override string ConvertToString( TypeConverterOptions options,object value )
    {
        if( value == null )
        {
            return string.Empty;
        }

        var boolValue = (bool)value;

        return boolValue ? "yes" : "no";
    }
}

然后,您可以将其应用于全球所有布尔值.

CsvHelper.TypeConversion.TypeConverterFactory.AddConverter<bool>( new MyBooleanConverter() );

或者通过映射将其应用于单个属性.

Map( m => m.MyBoolProperty ).TypeConverter<MyBooleanConverter>();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读