在文件上传时使用CSVHelper

我正在尝试使用CSVhelper插件来读取上传的CSV文件。 这是我的modelBinder类:

public class SurveyEmailListModelsModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var csv = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); var file = ((csv.RawValue as HttpPostedFileBase[]) ?? Enumerable.Empty()).FirstOrDefault(); if (file == null || file.ContentLength < 1) { bindingContext.ModelState.AddModelError( "", "Please select a valid CSV file" ); return null; } using (var reader = new StreamReader(file.InputStream)) using (var csvReader = new CsvReader(reader)) { return csvReader.GetRecords().ToArray(); } } } 

这些是我想要映射到的对象:

 public class SurveyEmailListModels { [Key] [CsvField(Ignore = true)] public int SurveyEmailListId { get; set; } [CsvField(Index = 0)] public int ProgramId { get; set; } [CsvField(Index = 1)] public virtual SurveyProgramModels SurveyProgramModels { get; set; } [CsvField(Index = 2)] public string SurveyEmailAddress { get; set; } [CsvField(Index = 3)] public bool SurveyResponded { get; set; } } 

在Visual Studio调试器内部我收到一个错误:

  • base {"You must call read on the reader before accessing its data."} CsvHelper.CsvHelperException {CsvHelper.CsvReaderException}

没有使用插件,但错误信息似乎很清楚。 在访问结果之前必须有一个Read()函数来调用。 尝试将代码更改为以下内容:

 using (var reader = new StreamReader(file.InputStream)) using (var csvReader = new CsvReader(reader)) { // Use While(csvReader.Read()); if you want to read all the rows in the records) csvReader.Read(); return csvReader.GetRecords().ToArray(); }