我正在从IEnumerable<dynamic>
对象中写入CSV。我不知道这些对象可以有多少DateTime
个字段,也不知道它的名称。
是否有办法告诉CsvWriter
将所有DateTime对象写为ISO 8601字符串?
var records = new List<dynamic>();
dynamic record = new ExpandoObject();
record.Timestamp = DateTime.UtcNow;
records.Add(record);
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
writer.ToString().Dump(); // I want the DateTime to be in ISO 8601 format (2020-05-01T15:29:19Z)
}
您可以使用TypeConverterOptions
并将选项应用到DateTime
。
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
var options = new TypeConverterOptions { Formats = new [] {"s"} };
//apply options to datetime
csv.Configuration.TypeConverterOptionsCache.AddOptions<DateTime>(options);
csv.WriteRecords(records);
writer.ToString().Dump();
}
// output
// 2020-05-01T16:02:36
这使用"s"
(可排序的日期时间格式)。您可以应用任何喜欢的格式,例如:Formats = new [] { "yyyy-MM-ddTHH:mm:ss" }
将给出类似的结果。
请参阅更新的demo。