mperdeck / LINQtoCSV

Popular, easy to use library to read and write CSV files.
197 stars 112 forks source link

[CSVColumn(Name="")] not being respected #19

Open joeldow opened 10 years ago

joeldow commented 10 years ago

The column name is not being respected in the output file. What am I doing wrong?

Model:

public class ItemExportCSVModel
{
    [CsvColumn(Name="ID", FieldIndex=1)]
    public int ID { get; set; }
    [CsvColumn(Name = "GUID", FieldIndex = 2)]
    public string Guid { get; set; }
    [CsvColumn(Name = "FirstName", FieldIndex = 3)]
    public string FirstName { get; set; }
    [CsvColumn(Name = "LastName", FieldIndex = 4)]
    public string LastName { get; set; }
    [CsvColumn(Name = "employee_number", FieldIndex = 5)]
    public string EmployeeNumber { get; set; }
    [CsvColumn(Name = "email", FieldIndex = 6)]
    public string Email { get; set; }
    [CsvColumn(Name = "date_of_purchase", FieldIndex = 7)]
    public DateTime DateOfPurchase { get; set; }
    [CsvColumn(Name = "IMEI", FieldIndex = 8)]
    public string IMEI { get; set; }
    [CsvColumn(Name = "Product", FieldIndex = 9)]
    public string Product { get; set; }
    [CsvColumn(Name = "order_number", FieldIndex = 10)]
    public string OrderNumber { get; set; }
    [CsvColumn(Name = "Status", FieldIndex = 11)]
    public string Status { get; set; }
    [CsvColumn(Name = "Reason", FieldIndex = 12)]
    public string Reason { get; set; }
}

Controller:

private CsvActionResult<ItemExportCSVModel> CSVExporter_SaveCSV(CSVExporter Model)
    {
        List<Dictionary<string, object>> list = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(Model.Data);
        List<ItemExportCSVModel> toExport = new List<ItemExportCSVModel>();

        foreach (var dict in list)
        {
            toExport.Add(new ItemExportCSVModel() { 
                ID = dict.ContainsKey("StatusValue") ? int.Parse(dict["ItemId"] != null ? dict["ItemId"].ToString() : "-1") : -1,
                Guid = dict.ContainsKey("ItemGuid") ? dict["ItemGuid"].ToString() : null,
                FirstName = dict.ContainsKey("FirstName") ? dict["FirstName"].ToString() : null,
                LastName = dict.ContainsKey("LastName") ? dict["LastName"].ToString() : null,
                EmployeeNumber = dict.ContainsKey("employee_number") ? dict["employee_number"].ToString() : null,
                Email = dict.ContainsKey("UserEmail") ? dict["UserEmail"].ToString() : null,
                DateOfPurchase = dict.ContainsKey("date_of_purchase") ? DateTime.Parse(dict["date_of_purchase"] as string ?? DateTime.MaxValue.ToString()) : DateTime.MaxValue,
                IMEI = dict.ContainsKey("IMEI") ? dict["IMEI"].ToString() : null,
                Product = dict.ContainsKey("ProductName") ? dict["ProductName"].ToString() : null,
                OrderNumber = string.Empty,
                Status = dict.ContainsKey("StatusValue") ? dict["StatusValue"].ToString() : null,
                Reason = dict.ContainsKey("Reason") ? dict["Reason"].ToString() : null
            });
        }

        CsvFileDescription outputFileDescription = new CsvFileDescription
        {
            SeparatorChar = ',',
            FirstLineHasColumnNames = true,
            FileCultureName = "en-US"
        };

        CsvContext cc = new CsvContext();
        string fileName = string.Format("item-details-export_{0}{1}_{2}.csv", 
            toExport.Count(), 
            (Model.UpdateStatusTo > 0 ?  ("_" + Model.UpdateStatusTo.ToString()) : string.Empty), 
            DateTime.Now.ToString("yyyy.MM.dd.hh.mmssfff"));
        string finalPath = Server.MapPath(_CSVExportPath) + fileName;

        //Save the CSV for our records.
        cc.Write(toExport, finalPath, outputFileDescription);

        //Return the result of the CSV
        return new CsvActionResult<ItemExportCSVModel>(toExport, fileName, ',');
    }