CsvHelper ReaderException:无法将类型“System.String”的对象转换为类型“System.Nullable`1[System.Decimal]”

问题描述 投票:0回答:1

我首先尝试读取一个包含记录的文件,其中包含值为“120,000.00”的列。我想将此列转换为可为空的小数。 尽管该文件源自瑞士,但 C# 似乎不适合这种格式,并且帮助程序(使用 de-CH CultureInfo)引发了 TypeConverterException。所以我用自定义替换器删除了逗号,解决了转换问题。 不幸的是,我现在得到了 ReaderException:

无法将“System.String”类型的对象转换为“System.Nullable`1[System.Decimal]”类型

为什么类型转换成功后仍然抛出异常?该行为可以重现吗? (CsvHelper 版本 15.0.8,CsvHelper.CsvReader.d__63`1.MoveNext() 处的堆栈跟踪)

public class MyFile
{
    public decimal? MyField { get; set; }
}

_

public MyFileMap : ClassMap<MyFile>
{
    public MyFileMap()
    {
        Map(x => x.MyField).Name("My Field").TypeConverterOption.NumberStyles(System.Globalization.NumberStyles.Number).TypeConverter<DecimalStringReplacer>();  //custom replacer removes the comma
    }
}

_

var records = csvReader.GetRecords<MyFile>() //csvReader uses CultureInfo "de-CH". Raises ReaderException
c# csvhelper
1个回答
1
投票

这是因为 de-CH 的

NumberGroupSeparator
而不是
,

这会很好用:

using var reader = new StringReader("120’000.00");
using var csvReader = new CsvHelper.CsvReader(reader, CultureInfo.GetCultureInfo("de-CH"));
if (csvReader.Read())
{
    var result = csvReader.GetField<decimal>(0);
}
© www.soinside.com 2019 - 2024. All rights reserved.