问题描述
我有一个csv文件,其中包含整数,字符串,布尔和浮点类型的数据。问题是,某些字段为空。当我尝试使用csvhelper读取csv文件时,出现TypeConversion.TypeConverterException错误。我检查了细节,看起来像是因为它无法将空float值转换为字符串。我该如何处理?
namespace Smh
{
class Program
{
static void Main(string[] args)
{
List<E> EList = new List<E>();
List<E2> EList2 = new List<E2>();
string filePath = @"D:\Visual Studio\Projects\Example\boo.csv";
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
{
var example= new E();
EList= csv.GetRecords<E>().ToList();
}
.
.
.
“ E”类的一部分:
.
.
public float weight { get; set; }
.
.
和我得到的错误: https://i.postimg.cc/dVPkYDCm/image.png
csv文件的一小部分:
id | speed | type | weight
1 40 type1 5.4
2 43 type2
3 16 type3 5.2
解决方法
最简单的解决方案,无需使用ClassMap
自定义映射器,
是将类型更改为float?
。
public class Test{
public int id{get;set;}
public int speed{get;set;}
public string type{get;set;}
public float? weight{get;set;}
}
然后,如果您需要更改默认值,则可以添加将返回Single.NaN
示例: Live Demo
public static void Main()
{
var result = new List<Test>();
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
{
//Csv Creation
writer.WriteLine("id,speed,type,weight");
writer.WriteLine("1,40,type1,5.4");
writer.WriteLine("2,43,type2,");
writer.WriteLine("3,16,type3,5.2");
writer.Flush();
stream.Position = 0;
csv.Configuration.HasHeaderRecord = true;
csv.Configuration.Delimiter = ",";
result = csv.GetRecords<Test>().ToList();
}
result.Dump();
}