Ja, Sie können. Sie würden eine Klasse von JsonConverter
ableiten und die CanConvert
-Methode überschreiben, um anzuzeigen, dass Sie den Client
-Typ konvertieren können.
Dann überschreiben Sie die Methoden ReadJson
und WriteJson
, um die Felder des JSON-Literals zu lesen und zu schreiben.
Für einen JSON wörtlichen wie dieser, ist es mehr als wahrscheinlich, dass Sie eine JsonConverter
für die Case
Typ erstellen müssen, wie Sie bei der Serialisierung alle Eigenschaften des Client
Objekt müssen zwischenzuspeichern, bis Sie genügend Informationen haben, um tatsächlich zu schaffen die Client
Instanz.
Dann würden Sie die Add
Methode auf der von den Converters
property auf der JsonSerializer
Instanz ausgesetzt JsonConverterCollection
Instanz rufen Sie verwenden Ihre Serialisierung/Deserialisierung auszuführen.
Beachten Sie, dass, wenn Sie dies für eine Reihe von verschiedenen Klassen tun müssen, um die auf diese Weise dargestellt werden können, dann können Sie einJsonConverter
Implementierung schreiben, und haben es auf dem Grundstück für ein Attribut scannen. Wenn die Eigenschaft das Attribut besitzt und ein anderes Objekt mit Eigenschaften verfügbar macht, würde es erwarten, die Punktnotation zu lesen/schreiben.
Es sollte beachtet werden, dass es sehr ungewöhnlich ist, wenn Sie die Punktnotation für den Bezeichner verwenden. Wenn möglich, auf der Seite, die JSON wörtlichen baut, sollte es es auf diese Weise tun:
{
CaseName: "John Doe v. State",
CaseDate: "<some date>",
Client:
{
FirstName: "John",
LastName: "Doe",
Email: "[email protected]"
}
}
Aber das ist vorausgesetzt, dass Sie die Kontrolle über diesem Zweck haben. Wenn Sie das nicht tun, können Sie nicht viel tun.
Wenn Sie die Kontrolle haben, würde das Konstruieren Ihrer JSON-Literale auf diese Weise die Notwendigkeit einer benutzerdefinierten Implementierung JsonConverter
negieren.
Das ist nicht JSON. – ChaosPandion
Ich habe es vereinfacht, um es lesbarer zu machen, aber ich habe es so modifiziert, dass es jetzt JSON ist. –
um den Kommentar von ChaosPandion zu erweitern - der Standardweg repräsentiert, dass geschachtelte Daten (der Client) in Json eher wie {"CaseName": "John Doe v.State", "CaseDate": "", "Client" {" FirstName ":" John "," LastName ":" Doe "}} Wenn es möglich ist, den ausgegebenen Json stattdessen zu ändern, wäre das viel schneller als @ CasperOne's sln. Hängt davon ab, ob Sie die Serialisierung kontrollieren können? –
MemeDeveloper