使用csvhelper(nuGET)和C#MVC导入CSV文件

通过NuGet提供的http://csvhelper.com用于读取和写入CSV文件。 CsvHelper允许您直接将CSV文件读入自定义类。 如上一个问题所示
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
  CsvReader会自动计算   如何匹配属性名称   基于标题行(这是   配置)。它使用编译   表达树而不是   反思,所以它非常快。      它也是非常可扩展的   可配置的。 我基本上试图找出如何读取带有标题(未知名称)的CSV文件并将记录读入自定义对象。 根本没有这方面的文档,所以想知道是否有人知道如何使用CsvReader将值按顺序放入字符串数组中,或者你会如何推荐处理这个?     
已邀请:
这是我的第一个版本,我将更新,因为我修改了一些内容并使其更完整,但这给了我字符串数组中的所有数据。
   [HttpPost]
        public ActionResult UploadFile(HttpPostedFileBase file)
        {

            ICsvParser csvParser = new CsvParser(new StreamReader(file.InputStream));
            CsvReader csvReader = new CsvReader(csvParser);
            string[] headers = {};
            List<string[]> rows = new List<string[]>();
            string[] row;
            while (csvReader.Read())
            {
                // Gets Headers if they exist
                if (csvReader.HasHeaderRecord && !headers.Any())
                {
                    headers = csvReader.FieldHeaders;
                }
                row = new string[headers.Count()];
                for (int j = 0; j < headers.Count(); j++)
                {
                    row[j] = csvReader.GetField(j);
                }
                rows.Add(row);
            }
            ImportViewModel model = new ImportViewModel(rows);
            return View(model);
        }
    
您可以在您的属性上放置一个
CsvFieldAttribute
,您可以在其中输入csv字段的名称或csv字段的索引。只有在csv文件中有标题行时,名称才有效。
public class MyCustomClass
{
    [CsvField( FieldIndex = 1 )]
    public string Property1 { get; set; }

    [CsvField( FieldIndex = 0 )]
    public string Property2 { get; set; }

    [CsvField( FieldIndex = 2 )]
    public string Property3 { get; set; }
}
如果您要做的就是按照文件中的顺序将记录读入字符串数组,您只需使用
CsvParser
而不是
CsvReader
。拨打
CsvParser.Read()
会返回
string[]
CsvReader
使用
CsvParser
读取原始数据。     
我知道这与CVSHelpers无关,但您可能会考虑使用FileHelpers项目 它允许您使用属性装饰对象上的字段,以便它表示csv文件中的一行,然后使用FileHelperEngine读取文件 - 产生一个对象数组,每个对象代表一行 看到这个快速入门读取分隔文件     

要回复问题请先登录注册