Warum kann ich diese benutzerdefinierte Struktur nicht mithilfe von Json.Net deserialisieren?

7

Ich habe eine Struktur, die eine DateTime darstellt, die auch Zoneninformationen wie folgt hat:

%Vor%

Ich kann das Objekt serialisieren mit:

%Vor%

Aber wenn ich es mit dem folgenden deserialisieren, bekomme ich einen ungültigen DateTime Wert (DateTime.MinValue)

%Vor%

Jede Hilfe wird sehr geschätzt.

    
MaYaN 13.07.2014, 19:10
quelle

2 Antworten

10

Sie müssen eine benutzerdefinierte JsonConverter richtig schreiben Serialisieren und Deserialisieren dieser Werte. Fügen Sie diese Klasse zu Ihrem Projekt hinzu.

%Vor%

Registrieren Sie es dann mit den von Ihnen verwendeten json-Einstellungen. Zum Beispiel können die Standardeinstellungen wie folgt geändert werden:

%Vor%

Dann wird es ordnungsgemäß in ein verwendbares Format serialisiert. Beispiel:

%Vor%

Und es wird auch richtig deserialisiert.

Wenn Sie die lokale Zeit einschließen möchten, fügen Sie dies nur zur WriteJson -Methode hinzu, aber sie sollte wahrscheinlich beim Deserialisieren ignoriert werden. Sonst hättest du zwei verschiedene Wahrheitsquellen. Nur einer kann maßgebend sein.

Außerdem könntest du stattdessen Noda Time ausprobieren, das eine ZonedDateTime struct für genau diesen Zweck enthält. Es gibt bereits eine Unterstützung für die Serialisierung über die NodaTime.Serialization.JsonNet NuGet-Paket.

    
Matt Johnson 13.07.2014, 19:23
quelle
11

Erklären Sie einfach den Konstruktor wie folgt, das ist alles

%Vor%

Hinweis: Ich habe nur das Attribut JsonConstructor hinzugefügt und den Parameternamen als universalTime

geändert     
EZI 13.07.2014 19:26
quelle