您将编写一些辅助方法来读取和写入您的 csv,但在调用该方法进行读取/写入之前,您需要执行此操作(使用 nuget 包的 v23.0.0 测试):
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
以下是写入记录的辅助方法示例:
using (var writer = new StreamWriter(outfile, true))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.Context.TypeConverterCache.AddConverter<List<string>>(new JsonConverter<List<string>>());
csv.Context.TypeConverterCache.AddConverter<Dictionary<string,string>>(new JsonConverter<Dictionary<string,string>>());
csv.WriteRecords(yourRecords);
}
你需要添加这个类(我从官方文档中找到的):
public class JsonConverter<T> : ITypeConverter
{
public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
return JsonConvert.DeserializeObject<T>(text);
}
public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return JsonConvert.SerializeObject(value);
}
}
参考资料:
CsvHelper set default custom TypeConverter
https://joshclose.github.io/CsvHelper/examples/configuration/class-maps/type-conversion/