Search code examples
asp.net-mvcasp.net-mvc-4csvhelper

Why only the first row is read by the CSV Helper using ASP.Net MVC?


I have a problem when reading a CSV file using CSVHelper because it only returns the first row of the csv with the header.

I've used this code on reading the CSV file.

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

I've used some mapping for this

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;
            });

}

This is the CSV file that I'm reading

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

I get the result through my variable json.


Solution

  • Try to load the data into a DataTable using CsvReader:

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

    Then get the json from the DataTable:

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