Ich verwende Json.NET, um eine Klasse in JSON zu serialisieren.
Ich habe die Klasse so:
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
Ich möchte JsonIgnore()
der Test2List
Eigenschaft nur dann ein Attribut hinzufügen , wenn dies der Fall Test2List
ist null
. Wenn es nicht null ist, möchte ich es in meinen json aufnehmen.
JsonSerializerSettings
nicht verwenden,JsonSerializer
da es einen Fehler für den letzten zeigteEine alternative Lösung mit dem
JsonProperty
Attribut:Wie in diesem Online-Dokument zu sehen .
quelle
[JsonObject]
Beachten Sie jedoch, dass der Attributname unterschiedlich ist. [bearbeitete Antwort]Ähnlich wie bei der Antwort von @ sirthomas respektiert JSON.NET auch die
EmitDefaultValue
Eigenschaft aufDataMemberAttribute
:Dies kann wünschenswert sein, wenn Sie bereits
[DataContract]
und[DataMember]
in Ihrem Modelltyp verwenden und keine JSON.NET-spezifischen Attribute hinzufügen möchten.quelle
Du kannst schreiben:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
Es wird auch dafür gesorgt, dass Eigenschaften nicht mit Standardwerten (nicht nur null) serialisiert werden. Dies kann beispielsweise für Aufzählungen nützlich sein.
quelle
Sie können dies tun, um alle Nullen in einem Objekt, das Sie serialisieren, zu ignorieren. Alle Null-Eigenschaften werden dann nicht im JSON angezeigt
quelle
Wie in diesem Link auf ihrer Website zu sehen ist (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx) I. Unterstützung mit [Default ()] zur Angabe von Standardwerten
Entnommen aus dem Link
quelle
Eine Anpassung an die Antwort von @ Mrchief / @ amit, aber für Leute, die VB verwenden
Siehe: "Objektinitialisierer: Benannte und anonyme Typen (Visual Basic)"
https://msdn.microsoft.com/en-us/library/bb385125.aspx
quelle
In .Net Core ist dies jetzt viel einfacher. Fügen Sie in Ihrer startup.cs einfach json-Optionen hinzu und Sie können die Einstellungen dort konfigurieren.
quelle
Mit Json.NET
Das Ergebnis wird sein:
quelle
Mit
System.Text.Json
und .NET Core 3.0 hat das bei mir funktioniert:quelle
Um die sehr hilfreiche Antwort von GlennG ein wenig zu erläutern (die Übersetzung der Syntax von C # in VB.Net ist nicht immer "offensichtlich"), können Sie auch einzelne Klasseneigenschaften dekorieren, um zu verwalten, wie Nullwerte behandelt werden. Wenn Sie dies tun, verwenden Sie nicht die globalen JsonSerializerSettings aus GlennGs Vorschlag, da sonst die einzelnen Dekorationen überschrieben werden. Dies ist praktisch, wenn ein Nullelement im JSON angezeigt werden soll, damit der Verbraucher keine spezielle Behandlung durchführen muss. Wenn der Verbraucher beispielsweise wissen muss, dass normalerweise eine Reihe optionaler Elemente verfügbar ist, diese jedoch derzeit leer sind ... Die Dekoration in der Eigenschaftsdeklaration sieht folgendermaßen aus:
Für diese Eigenschaften, die in der JSON-Änderung überhaupt nicht angezeigt werden sollen: = NullValueHandling.Include to : = NullValueHandling.Ignore . Übrigens - ich habe festgestellt, dass Sie eine Eigenschaft sowohl für die XML- als auch für die JSON-Serialisierung problemlos dekorieren können (stellen Sie sie einfach direkt nebeneinander). Dies gibt mir die Möglichkeit, den XML-Serializer in Dotnet oder den NewtonSoft-Serializer nach Belieben aufzurufen - beide arbeiten nebeneinander und meine Kunden haben die Möglichkeit, mit XML oder JSON zu arbeiten. Dies ist wie ein Rotz auf einem Türknauf, da ich Kunden habe, die beides benötigen!
quelle
Hier ist eine Option, die ähnlich ist, aber eine andere Auswahl bietet:
Dann benutze ich es so:
Der Unterschied hier ist, dass:
JsonSerializerSettings
jedes verwendeten Ortes.quelle
quelle