Как обрабатывать пустой столбец при синтаксическом анализе с помощью CsvHelper?
У меня есть CSV-файл, я пытаюсь его разобрать, но получаю следующую ошибку на int datatype column.In файл, я передаю пустое или пустое значение для этого столбца.
[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>());
Ошибка:
Произошла ошибка при разборе ' xyz.csv-файл для объекта "Test": '[{"Error": "преобразование не может быть выполнено.текст: "rn
Свойством Membertype: Система.Типа int32рн класса typeconverter: 'CsvHelper.TypeConversion.Int32Converter'","Description":"CsvHelper.TypeConversion.TypeConverterException: Преобразование не может быть выполнено.r n текст: "R n MemberType: System. Int32rn TypeConverter: 'CsvHelper.Тип преобразование.Int32Converter'рн по CsvHelper.Конфигурация.Конфигурация.с.Б__148_4(CsvHelperException исключение)rn at CsvHelper.CsvReader.д_ _ 65.MoveNext ()rn at Система.Линк.Перечислимый.d__341.MoveNext()rn at System.Collections.Generic.List
1.AddEnumerable (IEnumerable1 enumerable)rn at System.Collections.Generic.List
1.InsertRange (индекс Int32, IEnumerable1 collection)rn at Nec.Stanchion.Business.MasterDataFiles.Handling.MasterDataFileParser.Parse(Stream masterData, Type entityType, IEnumerable
1& errors) в xyz.CS файл"}]'.
Причина очень ясна, что пустая или пустая строка несовместима с типом данных int
, поэтому должен быть какой-то способ разрешить пустое или нулевое значение со значением столбца типа данных int
.
Версия CsvHelper=6.0.0.0
1 ответ:
Я использую CsvHelper 6.1.0 в моем текущем проекте, просто протестировал вариант использования, подобный вашему, поле int в пустом файле csv, и не было никаких проблем. Вот код, который я использую, надеюсь, это поможет:
CsvReader csv = new CsvReader(new StreamReader(file.OpenReadStream())); csv.Configuration.RegisterClassMap<PessoaCSVMap>(); csv.Configuration.Delimiter = ";"; csv.Configuration.HeaderValidated = null; csv.Configuration.MissingFieldFound = null; List<Pessoas> pessoas = csv.GetRecords<Pessoas>().ToList();
public sealed class PessoaCSVMap : ClassMap<Pessoas> { public PessoaCSVMap() { Map(m => m.Nome).Name("Nome", "Name"); ... etc } }