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

Chr*_*uer 3 asp.net-mvc csvhelper

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

我的 CSV 文件

SIC,Description,Grouping
1,text,group
Run Code Online (Sandbox Code Playgroud)

我的模型

public class SicCodeModel
{
    public string SIC { get; set; }
    public string Description { get; set; }
    public string Grouping { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的地图类

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

控制器代码

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();
}
Run Code Online (Sandbox Code Playgroud)

我正在上传文件的 MVC 模型

public class ImportModel
{
    [Required]
    public HttpPostedFileBase File { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Squ*_*ing 7

对于那些偶然发现这篇文章而没有真正正确阅读问题的人(像我一样),实际上是我的解决方案:

csv.Read();
csv.ReadHeader();
Run Code Online (Sandbox Code Playgroud)

例子:

using var reader = new StreamReader(filepathToCsv);
using var csv = new CsvReader(reader, csvConfig);

csv.Read();
csv.ReadHeader();
var records = csv.GetRecords<MyType>().ToArray();

Run Code Online (Sandbox Code Playgroud)

希望能帮助像我一样可怜的迷失的灵魂


Ogn*_*nić 5

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

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