我开始使用
CSV Helper – 一个出色的小帮手,适合你的日常工作 – 很棒的东西!
我现在正在努力的一个项目是班级地图 – 我有一个小班级
@H_403_4@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;为此,我创建了一个类映射:
@H_403_4@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"); } }现在在导出我的数据时,我正在使用该类映射:
@H_403_4@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,“真实”,“是”等.
@H_403_4@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";
}
}
然后,您可以将其应用于全球所有布尔值.
@H_403_4@CsvHelper.TypeConversion.TypeConverterFactory.AddConverter<bool>( new MyBooleanConverter() );或者通过映射将其应用于单个属性.
@H_403_4@Map( m => m.MyBoolProperty ).TypeConverter<MyBooleanConverter>();