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
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.
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.
Tags und Links c# asp.net serialization json.net