【发布时间】:2022-11-24 01:08:27
【问题描述】:
我的 CsvBool 转换器是
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";
}
}
写入文件时,一切都按预期进行。所有真布尔值都写成
YES
在尝试读取 csv 文件时,出现错误
More than one method 'ConvertFromString' on type 'CsvBool' is compatible with the supplied arguments.
错误是第一个循环中的CsvHelperException类型
我在这里做错了什么?
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>();
}
}
【问题讨论】:
-
public override string ConvertFromString对于BooleanConverter来说似乎很奇怪。它不应该返回Boolean吗? -
ConvertFromString应具有object的返回类型并返回bool值,而不是string值。 -
从 .NET 5 开始,您可以覆盖具有更具体(派生)返回类型的方法,但是
string在这里是错误的类型(您需要bool),并且 CsvHelper 中没有任何东西可以利用它在调用它时,所以这样做没有意义。