Настройка формата FileHelpers DateTimeConverter во время выполнения - PullRequest
0 голосов
/ 26 марта 2020

Мне нужно импортировать файл CSV, но мои пользователи должны иметь возможность выбирать формат даты, который их файл CSV использует для дат.

В настоящее время мое свойство даты объявлено как

    [FieldOrder(3)]
    [FieldConverter(ConverterKind.Date, "yyyyMMdd")]
    public DateTime contribution_date { get; set; }

Однако мой клиент может загружать файл, в котором формат даты находится вне их контроля, и может не соответствовать существующему формату. Это выдает исключение, когда я пытаюсь проанализировать файл.

У кого-нибудь есть рабочий пример того, как изменить формат DateTimeConverter (arg1) во время выполнения?

Мой сопоставленный тип является объектом домена в нашей среде EF, поэтому я не решаюсь представить ClassBuilder (если только я не могу запустить конструктор классов с существующим классом, чего я не знаю, я могу).

Любой предложения?

Спасибо,

Джонатан

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020
var converter = myEngine.Options.Fields[0].Converter;
var converterType = converter.GetType();
var FieldInfo = converterType.GetField("mFormat", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
FieldInfo.SetValue(converter, myDateFormatString);

Вот как я это сделал, немного хакерский, но это сработало!

0 голосов
/ 26 марта 2020

В итоге я использовал DelimitedClassBuilder для создания прокси-класса. Я использую этот прокси-класс для сопоставления значений из файла .CSV с объектами. NET, затем использую отражение для извлечения значений из полей объекта и сопоставления их с моим желаемым типом назначения.

Это кажется немного мне повезло, и я не уверен на 100%, что использую инструмент по назначению.

Может кто-нибудь подтвердить, что отражение - это ожидаемый путь для отображения значений из этих прокси-объектов?

...