使用CSV Helper解析时未找到标头记录

时间:2016-02-24 17:37:31

标签: asp.net-mvc csvhelper

我似乎已经没有关于这个问题的想法了。我把它剪切到尽可能简单,但我每次都得到“没有找到头记录”错误。

我的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运行时,我得到了错误。

感谢您的帮助。这似乎应该是超级简单的,但我必须遗漏一些东西。

2 个答案:

答案 0 :(得分:3)

发生错误是因为您在model.File.InputStream之前阅读了CsvReader,并且未在InputStream中返回位置光标以准备CsvReader

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

答案 1 :(得分:1)

我得到了这段代码。唯一的变化是控制器代码。我从上传的文件到StreamReader到CsvReader都是正确的。到目前为止运作良好。

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

using (CsvReader csvReader = new CsvReader(reader))
{
      var stuff = csvReader.GetRecords<SicCodeModel>();
}