CSVHelper-可以编写字典列表

问题描述

我有一个字典列表,具有相同的键列表,但值不同。有没有办法使用CSVHelper将其写入CSV文件?我在下面有示例代码,但是显然没有用。

       static void Main(string[] args)
        {

            List<Dictionary<String,String>> records = new List<Dictionary<string,string>>();
            Dictionary<String,String> data1 = new Dictionary<String,String>();
            data1.Add("Name1","Value1");
            data1.Add("Name2","Value2");
            records.Add(data1);

            Dictionary<String,String> data2 = new Dictionary<String,String>();
            data2.Add("Name1","Value1");
            data2.Add("Name2","Value2");
            records.Add(data2);

            using (var writer = new StreamWriter("e:\\temp\\test.csv"))
            using (var csv = new CsvWriter(writer))
            {

                csv.WriteRecords(records);
//GEtting exception here
//CsvHelper.Configuration.CsvConfigurationException: 'Types that inherit IEnumerable cannot be auto mapped. Did you accidentally call GetRecord or WriteRecord which acts on a single record instead of calling GetRecords or WriteRecords which acts on a list of records?'

            }
        }

有什么办法解决吗?

谢谢!

解决方法

我相信唯一的方法就是手写出来。

using (var writer = new StreamWriter("e:\\temp\\test.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
    var headings = new List<string>(records.First().Keys);

    foreach (var heading in headings)
    {
        csv.WriteField(heading);
    }

    csv.NextRecord();

    foreach (var item in records)
    {
        foreach (var heading in headings)
        {
            csv.WriteField(item[heading]);
        }

        csv.NextRecord();
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...