我的CsvBool轉(zhuǎn)換器是
public class CsvBool : BooleanConverter
{
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if (value == null)
return string.Empty;
var boolValue = (bool)value;
return boolValue ? "YES" : "NO";
}
public override string ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if (text == null)
return string.Empty;
if (text == "YES")
return "true";
else
return "false";
}
}
編寫文件時(shí),一切都按預(yù)期工作。所有真正的布爾值都寫為YES
嘗試讀取csv文件時(shí),我收到錯(cuò)誤
More than one method 'ConvertFromString' on type 'CsvBool' is compatible with the supplied arguments.
錯(cuò)誤類型為第一個(gè)循環(huán)中的CsvHelperException
我在這里做錯(cuò)了什么?
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader, csvConfig))
csv.Context.TypeConverterCache.RemoveConverter<bool>();
csv.Context.TypeConverterCache.AddConverter<bool>(new CsvBool());
csv.Context.RegisterClassMap<CsvProduct>();
var CsvProducts = csv.GetRecords<Product>();
foreach (var CsvProduct in CsvProducts)
{
}
這是我的地圖課
public class CsvProduct : ClassMap<Product>
{
public CsvProduct()
{
Map(m => m.Active).Name("ActiveColumn").TypeConverter<CsvBool>();
}
}
您的
ConvertFromString
需要返回object
而不是string
。由于您將其標(biāo)記為returnstring
,它現(xiàn)在既可以看到返回對(duì)象的BooleanConverter
中的原始ConvertFromString
,也可以看到返回字符串的{%16}。僅供參考,已經(jīng)有一個(gè)
TypeConverterOption
可以滿足您的需求。您可以在
ClassMap
上單獨(dú)設(shè)置或在
TypeConverterOptionsCache