Мы обновляем старое приложение .NET до .NET Core 6.0, поэтому нам также необходимо обновить все зависимости, включая CsvHelper.
Наш старый код глобально устанавливает формат выходной даты для всех полей даты в CSV следующим образом:
using (var writer = new StreamWriter(writeStream))
{
var items = type?.GetProperty("Data")?.GetValue(value, null) as IEnumerable;
var csvWriter = new CsvWriter(writer);
csvWriter.Configuration.TypeConverterCache.AddConverter<Date>(new DateConverter());
var dateTimeOptions = new TypeConverterOptions
{
Formats = new [] { FormatConstants.DefaultDateTimeFormat }
};
csvWriter.Configuration.TypeConverterOptionsCache.AddOptions(typeof(DateTimeOffset), dateTimeOptions);
csvWriter.Configuration.TypeConverterOptionsCache.AddOptions(typeof(DateTime), dateTimeOptions);
csvWriter.WriteRecords(items);
}
Это невозможно в текущей версии CsvHelper, потому что TypeConverterCache и TypeConverterOptionsCache больше не доступны.
Аналогично, ответ, предложенный здесь, уже не работает, потому что TypeConverterOptionsFactory тоже недоступен.
Вся информация, которую я нашел в Интернете, требует, чтобы каждое поле даты в каждом классе отображалось индивидуально. Это было бы утомительно и расточительно, потому что у нас есть много DTO с полями даты, и мы хотим, чтобы все они выводились в одном и том же формате.
Есть ли способ указать вывод для всех полей даты глобально, как мы это делали в старой версии?
@averybusinesssolutions Если я правильно вас понял, я пытаюсь избежать этого решения. Я не хочу сопоставлять каждое поле даты с каждым DTO.





Я считаю, что вам просто нужно сделать пару корректировок.
Добавьте CultureInfo или CsvConfiguration к CsvWriter
var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture);
А TypeConverterCache и TypeConverterOptionsCache теперь включены csvWriter.Context
csvWriter.Context.TypeConverterCache.AddConverter<Date>(new DateConverter());
csvWriter.Context.TypeConverterOptionsCache.AddOptions(typeof(DateTimeOffset), dateTimeOptions);
csvWriter.Context.TypeConverterOptionsCache.AddOptions(typeof(DateTime), dateTimeOptions);
Сможете ли вы создать DTO для экспортера CSV? Затем вы можете добавить
[DataType(DataType.Date)]в качестве атрибута свойства, которое вы хотите отображать в виде даты.