Wie Json.Net Serialisierung von leeren Sammlungen zu überspringen

8

Ich habe ein Objekt, das mehrere Eigenschaften enthält, die eine Liste von Zeichenfolgen List<String> oder ein Wörterbuch von Zeichenfolgen Dictionary<string,string> sind. Ich möchte das Objekt zu json mit Json.net serialisieren und ich möchte die geringste Menge an Text generiert haben.

Ich verwende die DefaultValueHandling und NullValueHandling, um Standardwerte auf Zeichenfolgen und Ganzzahlen festzulegen. Aber wie kann ich das DefaultValueHandling definieren, um die Eigenschaft in der serialisierten Ausgabe zu ignorieren, wenn sie auf ein leeres List<String> oder Dictionary<string,string> ? Initialisiert wird?

Einige Beispielausgaben sind:

%Vor%

Ich möchte ein Ergebnis erhalten, das die beiden Listen im obigen Beispiel ignoriert, da sie auf den Standardwert einer leeren Liste gesetzt sind.

Jede Hilfe wird geschätzt

    
agarcian 27.08.2013, 17:25
quelle

2 Antworten

10

Ich habe diese Funktion im benutzerdefinierten Vertrag implementiert Resolver meines persönlichen Frameworks (Link zum spezifisches Commit falls die Datei später verschoben wird. Es verwendet einige Hilfsmethoden und enthält einen nicht verwandten Code für die Syntax der benutzerdefinierten Verweise. Ohne sie wird der Code sein:

%Vor%

Dieser Contract Resolver überspringt die Serialisierung aller leeren Collections (alle Typen, die ICollection implementieren und Length == 0 haben), es sei denn, DefaultValueHandling.Include ist für die Eigenschaft oder das Feld angegeben.

    
Athari 28.08.2013, 11:37
quelle
6

Eine weitere sehr einfache Lösung besteht darin, eine Methode ShouldSerialize* in dem Typ zu implementieren, der als Gliederung hier .

Dies könnte der bevorzugte Weg sein, wenn Sie den zu serialisierenden Typ kontrollieren und es sich nicht um ein allgemeines Verhalten handelt, das Sie einführen möchten.

    
Dejan 09.11.2015 13:50
quelle

Tags und Links