CSVHelper 无法将空浮点值转换为字符串
CSVHelper cannot convert empty float values to string
我有一个 csv 文件,其中包含整型、字符串、布尔型和浮点型数据。问题是,有些字段是空的。当我尝试使用 csvhelper 读取 csv 文件时,出现 TypeConversion.TypeConverterException 错误。我检查了细节,看起来是因为它不能将空浮点值转换为字符串。我该如何处理?
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”的一部分class:
.
.
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
自定义映射器的最简单解决方案,
就是把type改成float?
.
public class Test{
public int id{get;set;}
public int speed{get;set;}
public string type{get;set;}
public float? weight{get;set;}
}
然后,如果您需要更改默认值,您可以添加一个 Getter Setter,这将 return 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();
}
我有一个 csv 文件,其中包含整型、字符串、布尔型和浮点型数据。问题是,有些字段是空的。当我尝试使用 csvhelper 读取 csv 文件时,出现 TypeConversion.TypeConverterException 错误。我检查了细节,看起来是因为它不能将空浮点值转换为字符串。我该如何处理?
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”的一部分class:
.
.
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
自定义映射器的最简单解决方案,
就是把type改成float?
.
public class Test{
public int id{get;set;}
public int speed{get;set;}
public string type{get;set;}
public float? weight{get;set;}
}
然后,如果您需要更改默认值,您可以添加一个 Getter Setter,这将 return 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();
}