我正在尝试使用CsvHelper将一些数据输出到CSV文件。下面的CSVExport
的每个实例一行。由于Stores
上的长度可能不同,所以每一行的列数可能会有所不同。映射适用于前三个属性(CurrencyCode,StoreCode,OutletTradingName),但是我在List<Stores> Stores
上遇到了问题。
我目前收到以下带有以下代码的错误消息:
{"Converting IEnumerable types is not supported for a single field. If you want to do this, create your own ITypeConverter and register it in the TypeConverterFactory by calling AddConverter."}
关于如何解决此问题的任何建议?
要写入CSV文件的C#代码:
var memoryStream = new System.IO.MemoryStream();
var streamWriter = new System.IO.StreamWriter(memoryStream);
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.Configuration.RegisterClassMap<CSVExportMap>();
csvWriter.WriteRecords(csvExport);
streamWriter.Flush();
}
映射:
public sealed class CSVExportMap : CsvClassMap<CSVExport>
{
public CSVExportMap()
{
Map(m => m.CurrencyCode).Name("Outlet Currency").Default("Not available.");
Map(m => m.StoreCode).Name("Store No.").Default("Not available.");
Map(m => m.OutletTradingName).Name("Outlet Trading Name").Default("Not available.");
// if I comment this line out, I get no error but no list of stores
Map(m => m.Stores).ConvertUsing( row => new List<Stores> { row.GetRecord<Stores>() } );
}
}
我正尝试输出到CSV文件的类:
public class CSVExport
{
public string StoreCode { get; set; }
public string OutletTradingName { get; set; }
public string CurrencyCode { get; set; }
public List<Stores> Stores { get; set; }
}
public class Stores
{
public string Name { get; set; }
public string StoreCode { get; set; }
public string ID { get; set; }
}
答案 0 :(得分:1)
确保您拥有CsvHelper的最新版本。 (当前为v7.1.1)我尝试了您的代码并替换了以下行:
Map(m => m.Stores).ConvertUsing( row => new List<Stores> { row.GetRecord<Stores>() } );
与此:
Map(m => m.Stores).ConvertUsing(row =>
{
var list = new List<Store>();
list.Add(row.GetField<Store>(2));
return list;
});
或更短(单线):
Map(m => m.Stores).ConvertUsing(row => new List<Store> {row.GetField<Store>(2)});
,程序运行正常。 GetField<Store>(2)
中的索引从零开始,您的Store
类具有3个成员。我只是将您的Stores
类重命名为Store
(仅用于命名约定!这与Stores list属性混淆!对不起)