【问题标题】:No header record was found when parsing with CSV Helper使用 CSV Helper 解析时未找到任何标头记录
【发布时间】:2016-02-24 17:37:30
【问题描述】:

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

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

感谢您的帮助。这看起来应该超级简单,但我一定遗漏了一些东西。

【问题讨论】:

    标签: asp.net-mvc csvhelper


    【解决方案1】:

    发生错误是因为您在CsvReader 之前读取了model.File.InputStream,并且您没有返回InputStream 中的位置光标来为CsvReader 准备它。

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

    【讨论】:

      【解决方案2】:

      我得到了这个代码来工作。唯一的变化是控制器代码。我从上传的文件到 StreamReader 到 CsvReader。到目前为止工作良好。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多