【发布时间】:2018-01-24 15:44:14
【问题描述】:
我有一个 CSV 文件,我正在尝试解析它,但在 int 数据类型列上出现以下错误。在文件中,我为此列传递了空白或空值。
[AutoMap(typeof(Test))]
[FileEntity("Test")]
public class TestFileEntity : BaseFileEntity
{
[CsvFileColumn(1)]
public int TestId { get; set; }
}
public IEnumerable<BaseFileEntity> Parse(Stream masterData, Type entityType, out IEnumerable<MasterDataFileParserError> errors)
{
var list = new List<BaseFileEntity>();
var errorList = new List<MasterDataFileParserError>();
try
{
using (var reader = new StreamReader(masterData))
{
var parser = new CsvReader(reader, new CsvHelper.Configuration.Configuration
{
HasHeaderRecord = true,
HeaderValidated = null,
MissingFieldFound = null
});
list.AddRange(parser.GetRecords(entityType).Cast<BaseFileEntity>());
}
}
catch (Exception ex)
{
if (ex.Data == null || ex.Data.Count == 0)
{
errorList.Add(new MasterDataFileParserError
{
Error = ex.Message,
Description = ex.ToString()
});
}
else
{
foreach (var key in ex.Data.Keys)
{
errorList.Add(new MasterDataFileParserError
{
Error = ex.Message,
Description = $"{key}: {ex.Data[key]}"
});
}
}
}
errors = errorList;
return list;
}
此行中的异常:list.AddRange(parser.GetRecords(entityType).Cast<BaseFileEntity>());
错误:
为“Test”实体解析“xyz.csv”文件时出错: '[{"Error":"无法执行转换。\r\n Text: ''\r\n
MemberType: System.Int32\r\n 类型转换器: 'CsvHelper.TypeConversion.Int32Converter'","Description":"CsvHelper.TypeConversion.TypeConverterException: 无法执行转换。\r\n 文本: ''\r\n MemberType: System.Int32\r\n 类型转换器: 'CsvHelper.TypeConversion.Int32Converter'\r\n at CsvHelper.Configuration.Configuration.c.<.ctor>b__148_4(CsvHelperException 例外)\r\n 在 CsvHelper.CsvReader.d__65.MoveNext()\r\n at System.Linq.Enumerable.d__341.MoveNext()\r\n at System.Collections.Generic.List1.AddEnumerable(IEnumerable1 enumerable)\r\n at System.Collections.Generic.List1.InsertRange(Int32 index, xyz.cs 中的 IEnumerable1 collection)\r\n at Nec.Stanchion.Business.MasterDataFiles.Handling.MasterDataFileParser.Parse(Stream masterData, Type entityType, IEnumerable1& 错误) 文件"}]'。
原因很清楚,空白或空字符串与int 数据类型不兼容,因此必须有某种方法允许空值或空值与int 数据类型列值。
CsvHelper 版本=6.0.0.0
【问题讨论】:
-
听起来您应该将数据类型更改为可为空的 int (
int?)。 -
我已经尝试过将其设为可空,但无法正常工作
-
@viveknuna 您可能需要尝试在对象上转换为正确的类型来进行清理,我在下面提供了一个解决方案。