ServiceStack - параметры Year, Month и Day описывают непредставимый DateTime, даже используя JsConfig - PullRequest
2 голосов
/ 06 ноября 2019

Я просмотрел несколько ресурсов онлайн, но все, что я пробую, просто не работает. Что я делаю не так?

используя директивы

using ServiceStack;
using ServiceStack.Text;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;

Код

JsConfig<DateTime>.DeSerializeFn = str => DateTime.ParseExact(str, "dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture);

using (var fs = File.Open(@"C:\temp\data.csv", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    var data = CsvSerializer.DeserializeFromStream<List<Class>>(fs);
}

Также пробовал

JsConfig<DateTime>.DeSerializeFn = str => DateTime.ParseExact(str, "dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture);
var list = File.ReadAllText(@"C:\temp\data.csv").FromCsv<List<Class>>();

А что в csvfile?

StartDate, FirstRedemptionDate, FirstSubscriptionDate

01/08/2014 00:00, 31.08.2014 00:00, 01/08/2014 00: 00

30.09.2014 00:00, 01.08.2015 00:00, 30.09.2013 00: 00

1 Ответ

2 голосов
/ 06 ноября 2019

Проблема заключается в том, что ваш CSV имеет как , разделители, так и разделители пробелов, при использовании , разделителей CSV чувствителен к пробелам, например, вместо этого заголовки должны быть:

StartDate,FirstRedemptionDate,FirstSubscriptionDate

Asв настоящее время значение заголовка 'FirstRedemptionDate' равно ' FirstRedemptionDate'.

Я внес изменение, чтобы заголовки автоматически обрезались в этом коммите , что позволяет сопоставлять ваш собственный десериализатор DateTime сЗаголовки с пробелами в начале / конце, которые доступны из последней версии 5.7.1, которая теперь есть на MyGet .

Поскольку у вас также есть первые пробелы в значениях даты, вам также нужно будет обрезатьваше значение перед синтаксическим анализом, например:

JsConfig<DateTime>.DeSerializeFn = str => 
    DateTime.ParseExact(str.Trim(), "dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture);

, который теперь должен правильно анализироваться с использованием самого последнего v5.7.1 ServiceStack.Text на MyGet .

...