Ich versuche, ein JSON zu deserialisieren, das Daten im Format 2017-10-26 13:32:11 Etc/GMT
enthält. NodaTime scheint dies zu unterstützen, wenn es mit Json.NET und NodaTime.Serialization.JsonNet kombiniert wird. Ich fand hier einige Informationen über die Stackoverflow mir diese Arbeit erhalten hat, nur NodaTime mit:NodaTime.Serialization.JsonNet mit einem benutzerdefinierten Datumsformat arbeiten
var date = "2017-10-26 13:32:11 Etc/GMT";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy'-'MM'-'dd HH':'mm':'ss z",
DateTimeZoneProviders.Tzdb
);
var result = pattern.Parse(date);
jedoch bei diesem Beispiel erstreckt sich in eine JSON Deserialisieren die beiden anderen Pakete verwendet wird, kann ich nicht bekommen sie zu arbeiten. Aus der Lektüre der Dokumentation und anderen Ressourcen, ich glaube, dies funktionieren soll:
public class DateObj
{
public ZonedDateTime Date { get; set; }
}
void Main()
{
var date = "2017-10-26 13:32:11 Etc/GMT";
var json = $"{{\"Date\": \"{date}\"}}";
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture(
"yyyy-MM-dd HH:mm:ss z",
DateTimeZoneProviders.Serialization
);
var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(pattern.ZoneProvider);
var dateObj = JsonConvert.DeserializeObject<DateObj>(json, settings);
}
Aber es löst eine Ausnahme in der letzten Zeile sagt The value string does not match a quoted string in the pattern. Value being parsed: '2017-10-26^ 13:32:11 Etc/GMT'. (^ indicates error position.)
. Was mache ich falsch?
Haben Sie 'DateTimeOffset' statt der Noda Zeit' Typ OffsetDateTime' verwenden? Im Allgemeinen ist das Leben einfacher, wenn Sie sich vollständig an Noda Time Typen halten können. –
Nein, ich kann jeden Typ verwenden, aber es gibt keinen großen Unterschied, ich bekomme nur einen anderen Fehler; 'Die Wertzeichenfolge stimmt nicht mit einer Zeichenfolge in Anführungszeichen im Muster überein. Wert wird geparst: '2017-10-26^13:32:11 Etc/GMT'. (^ zeigt die Fehlerposition an.) '. Versucht mit ein paar verschiedenen Varianten des Musters, ohne '' 'etc, und mit ein paar verschiedenen Typen, 'OffsetDateTime' und' ZonedDateTime', aber der Fehler ist gleich geblieben. – TheQ
Wenn Sie den Wert "ZonedDateTime" festlegen möchten, sollten Sie in der Lage sein, ihn zum Laufen zu bringen. (Als ich "OffsetDateTime" vorgeschlagen hatte, hatte ich nicht bemerkt, dass Ihr Wert tatsächlich eine Zeitzone und keinen Offset enthält.) Im Moment geht es nicht um diesen Ansatz - es wäre wahrscheinlich sinnvoll, entweder Ihre aktuelle Antwort zu löschen und Ändern Sie die Frage zu "Getting NodaTime.Serialization.JsonNet mit einem benutzerdefinierten Format arbeiten" oder Erstellen einer neuen Frage dafür. Ich möchte auf jeden Fall helfen, aber ... –