3

在这个问题上,我似乎已经没有什么想法了。我已将其简化为尽可能简单,但每次我都会收到“未找到标题记录”错误。

我的 CSV 文件

SIC,Description,Grouping
1,text,group

我的模型

public class SicCodeModel
{
    public string SIC { get; set; }
    public string Description { get; set; }
    public string Grouping { get; set; }
}

我的地图课

public sealed class SicCodeMap : CsvClassMap<SicCodeModel>
{
    public SicCodeMap()
    {
        Map(m => m.SIC);
        Map(m => m.Description);
        Map(m => m.Grouping);
    }
}

控制器代码

byte[] uploadedFile = new byte[model.File.InputStream.Length];
model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);

using (var reader = new StreamReader(model.File.InputStream))
using (var csvReader = new CsvReader(reader))
{

     csvReader.Configuration.RegisterClassMap<SicCodeMap>();

     var items = csvReader.GetRecords<SicCodeModel>().ToList();
}

我正在上传文件的 MVC 模型

public class ImportModel
{
    [Required]
    public HttpPostedFileBase File { get; set; }
}

当我上传文件时,它就在那里。但是当 GetRecords 运行时,我得到了错误。

感谢您的任何帮助。这似乎应该非常简单,但我一定遗漏了一些东西。

4

2 回答 2

5

发生错误是因为您之前阅读model.File.InputStreamCsvReader并且没有返回位置光标InputStream以准备CsvReader.

行后:model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);只需调用model.File.InputStream.Seek(0, SeekOrigin.Begin);,您将不会再看到该错误。

于 2016-07-05T16:22:02.153 回答
1

I got this code to work. The only change was to the controller code. I got right from the uploaded file to StreamReader to the CsvReader. Working well so far.

StreamReader reader = new StreamReader(model.File.InputStream);

using (CsvReader csvReader = new CsvReader(reader))
{
      var stuff = csvReader.GetRecords<SicCodeModel>();
}
于 2016-02-24T18:15:37.547 回答