【发布时间】:2021-12-01 11:13:44
【问题描述】:
当我尝试使用 CsvHelper 解析以下 CSV 时,我收到“无法执行转换”错误(完整错误如下)。看起来我缺少有关如何处理以小数形式读取值的内容。已经看到其他一些与设置文化有关的答案,但这似乎没有帮助。
CSV 数据为:
Title,Amount,NHS,Reference,GoCardless ID,email,surname,firstname,Full Name,DOB,Age,Right Lens,Left Lens,RightLensMonthlyAmount,LeftLensMonthlyAmount,LensMonthlyAmount,FeeMonthlyAmount,VAT Basis,LensBespokePrice,CareOnly,Notes
Mrs,24.3,N,100247,CUXXX,email@gmail.com,User,Test,Test User,17/09/1957,64,DAILIES® AquaComfort PLUS 30 Pack,DAILIES® AquaComfort PLUS 30 Pack,16.5,16.5,33,6.35,,,,
将此数据映射到属性的类是:
public class Payer
{
public string Title { get; set; }
public decimal Amount { get; set; }
[BooleanTrueValues("Y")]
[BooleanFalseValues("N")]
public bool NHS { get; set; }
public string Reference { get; set; }
[Name("GoCardless ID")]
public string GoCardless_ID { get; set; }
public string email { get; set; }
public string surname { get; set; }
public string firstname { get; set; }
[Name("Full Name")]
public string Fullname { get; set; }
[Name("DOB")]
public string Dob { get; set; }
public int Age { get; set; }
[Name("Right Lens")]
public string RightLens { get; set; }
[Name("Left Lens")]
public string LeftLens { get; set; }
public decimal RightLensMonthlyAmount { get; set; }
public decimal LeftLensMonthlyAmount { get; set; }
public decimal LensMonthlyAmount { get; set; }
public decimal FeeMonthlyAmount { get; set; }
[Name("VAT Basis")]
public string VATBasis { get; set; }
public decimal LensBespokePrice { get; set; }
[BooleanTrueValues("Y")]
public bool CareOnly { get; set; }
}
我与解析 CSV 相关的代码是:
static void Main(string[] args)
{
var culture = new CultureInfo("en-GB");
var config = new CsvHelper.Configuration.CsvConfiguration(culture);
using (var reader = new StreamReader("test.csv"))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<Payer>();
Console.WriteLine("Got records"); //this prints on the console
foreach (var payer in records)
{
Console.WriteLine(payer);
}
}
}
该错误仅发生在 foreach 循环中,而不是实际的 GetRecords() 方法。
完全错误:
CsvHelper.TypeConversion.TypeConverterException: "无法执行转换。\n 文本: ''\n MemberType: System.Decimal\n TypeConverter: 'CsvHelper.TypeConversion.DecimalConverter'\nIReader 状态:\n ColumnCount: 0\ n CurrentIndex: 18\n HeaderRecord:\n["Title","Amount","NHS","Reference","GoCardless ID","email","surname","firstname","Full Name"," DOB","Age","Right Lens","Left Lens","RightLensMonthlyAmount","LeftLensMonthlyAmount","LensMonthlyAmount","FeeMonthlyAmount","增值税基础","LensBespokePrice","CareOnly","Notes"] \nIParser 状态:\n ByteCount: 0\n CharCount: 392\n Row: 2\n RawRow: 2\n Count: 21\n RawRecord:\nMrs,24.3,N,100247,CUXXX,email@gmail.com,用户,测试,测试用户,17/09/1957,64,DAILIES® AquaComfort PLUS 30 包,DAILIES® AquaComfort PLUS 30 包,16.5,16.5,33,6.35,,,,\r\n\n" 在 CsvHelper.TypeConversion.DefaultTypeConverter.ConvertFromString(字符串文本,IReaderRow 行,MemberMapData memberMapData)\n 在 CsvHelper.TypeConversion.DecimalConverter.ConvertFromString(字符串文本,IReaderRow 行,MemberMapData memberMapData)\n 在 CsvHelper.Expressions.RecordCreator.CreateT\n在 CsvHelper.Expressions.RecordManager.CreateT\n 在 CsvHelper.CsvReader.d__87`1.MoveNext()\n 在 /Users/abhi/Documents/Practice/dd-journal/ 中的 dd_journal.Program.Main(String[] args) Program.cs:22
【问题讨论】: