中的CSVHelper更改CSV文件中的标题名称

中的CSVHelper更改CSV文件中的标题名称

本文介绍了使用C#中的CSVHelper更改CSV文件中的标题名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用CSV Helper库来生成CSV文件供用户使用填充并上传到系统中.我的问题是,WriteHeader方法仅使用"PropertyValue"之类的名称来编写类的属性,这对用户不友好.有没有一种方法可以使生成的文本变得用户友好,但仍然能够将类成功映射到文件数据?

I am using CSV Helper library to produce CSV files for the user toto populate and upload into the system. My issue is that the WriteHeader method just writes the attributes of a class with names like "PropertyValue", which is not user friendly. Is there a method I can use to make the text produced user friendly but is still able to successfully map the class to the files data?

我的代码如下:

public ActionResult UploadPropertyCSV(HttpPostedFileBase file)
    {
        List<PropertyModel> properties = new List<PropertyModel>();
        RIMEDb dbContext = new RIMEDb();
        bool success = false;
        foreach (string requestFiles in Request.Files)
        {
            if (file != null && file.ContentLength > 0 && file.FileName.EndsWith(".csv"))
            {
                using(StreamReader str = new StreamReader(file.InputStream))
                {
                    using(CsvHelper.CsvReader theReader = new CsvHelper.CsvReader(str))
                    {
                        while (theReader.Read())
                        {
                            RIMUtil.PropertyUploadCSVRowHelper row = new RIMUtil.PropertyUploadCSVRowHelper()
                            {
                                UnitNumber = theReader.GetField(0),
                                StreetNumber = theReader.GetField(1),
                                StreetName = theReader.GetField(2),
                                AlternateAddress = theReader.GetField(3),
                                City = theReader.GetField(4)
                            };

                            Property property = new Property();
                            property.UnitNumber = row.UnitNumber;
                            property.StreetNumber = row.StreetNumber;
                            property.StreetName = row.StreetName;
                            property.AlternateAddress = row.AlternateAddress;
                            property.City = dbContext.PostalCodes.Where(p => p.PostalCode1 == row.PostalCode).FirstOrDefault().City;

                            dbContext.Properties.Add(property);
                            try
                            {
                                dbContext.SaveChanges();
                                success = true;
                            }
                            catch(System.Data.Entity.Validation.DbEntityValidationException ex)
                            {
                                success = false;
                                RIMUtil.LogError("Ptoblem validating fields in database. Please check your CSV file for errors.");
                            }
                            catch(Exception e)
                            {
                                RIMUtil.LogError("Error saving property to database. Please check your CSV file for errors.");
                            }
                        }
                    }
                }
            }
        }
        return Json(success);
    }

我想知道是否可以在PropertyUploadCSVRowHelper类的每个属性的顶部放置一些元数据标记或某些东西,以将要生成的文本放置在文件中

I'm wondering if theres some metadata tag or something I can put on top of each attribute in my PropertyUploadCSVRowHelper class to put the text I want produced in the file

预先感谢

推荐答案

不确定这是否存在于2年前,但是现在,我们可以使用以下属性函数来更改属性/列的名称:

Not sure if this existed 2 years ago but now, we can change the property/column name by using the following attribute function:

[CsvHelper.Configuration.Attributes.Name("Column/Field Name")]

完整代码:

using CsvHelper;
using System.Collections.Generic;
using System.IO;

namespace Test
{
    class Program
    {
        class CsvColumns
        {
            private string column_01;

            [CsvHelper.Configuration.Attributes.Name("Column 01")] // changes header/column name Column_01 to Column 01
            public string Column_01 { get => column_01; set => column_01 = value; }
        }

        static void Main(string[] args)
        {
            List<CsvColumns> csvOutput = new List<CsvColumns>();
            CsvColumns rows = new CsvColumns();
            rows.Column_01 = "data1";
            csvOutput.Add(rows);

            string filename = "test.csv";
            using (StreamWriter writer = File.CreateText(filename))
            {
                CsvWriter csv = new CsvWriter(writer);
                csv.WriteRecords(csvOutput);
            }
        }
    }
}

这篇关于使用C#中的CSVHelper更改CSV文件中的标题名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 05:10