首页 > 解决方案 > 为什么 CSV Helper 使用 ASP.Net MVC 只读取第一行?

问题描述

使用 CSVHelper 读取 CSV 文件时遇到问题,因为它只返回带有标题的 csv 的第一行。

我在阅读 CSV 文件时使用了此代码。

 using (var reader = new StreamReader(filePath))
 using (var csv = new CsvReader(reader))
 {
     csv.Configuration.RegisterClassMap<FundTransferMapSingle>();
     var json = JsonConvert.SerializeObject(csv.GetRecords<FundTransferSingle>());
 }

我为此使用了一些映射

public class FundTransferMapSingle : ClassMap<FundTransferSingle>
    {
        public FundTransferMapSingle()
        {
            Map(m => m.senderRefId).Name("senderRefId");
            Map(m => m.transRequestDate).Name("transRequestDate");
            Map(m => m.particulars).Name("particulars");

            Map(m => m.sender).ConvertUsing(row =>
            {
                var senderlist = new List<Sender>
                {
                    new Sender { name = row.GetField("senderName"),
                                 address = new List<Address>
                                    {
                                        new Address {line1 = row.GetField("senderAddrLine1"),
                                            line2 = row.GetField("senderAddrLine2"),
                                            city = row.GetField("senderAddrCity"),
                                            province = row.GetField("senderProvince"),
                                            zipCode = row.GetField("senderAddrZipcode"),
                                            country = row.GetField("senderAddrCountry")}
                                    }
                               }
                };
                return senderlist;
            });

}

这是我正在阅读的 CSV 文件

senderRefId,transRequestDate,particulars,senderName,senderAddrLine1
TRANSFER0001,2018-08-10T08:40:45.897,particulars,Name1,Address1
TRANSFER0002,2018-08-10T08:40:45.897,particulars,Name2,Address2

我通过我的变量得到结果json

标签: asp.net-mvcasp.net-mvc-4csvhelper

解决方案


尝试使用 CsvReader 将数据加载到 DataTable 中:

DataTable csvTable = new DataTable();
using (CsvReader csvReader = new CsvReader(new StreamReader(stream), true))
{
    csvTable.Load(csvReader);
}

然后从 DataTable 中获取 json:

using Newtonsoft.JSON;  

public string DataTableToJSONWithJSONNet(DataTable table) {  
   string JSONString=string.Empty;  
   JSONString = JSONConvert.SerializeObject(table);  
   return JSONString;  
} 

推荐阅读