[C#] Wie ignoriere ich eine Eigenschaft in der Klasse, wenn null, mit json.net


Answers

Eine alternative Lösung, die das JsonProperty Attribut verwendet:

[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
//or
[JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)]

Wie in diesem Online-Dokument zu sehen .

Question

Ich verwende Json.NET um eine Klasse zu 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 der Eigenschaft Test2List nur dann ein JsonIgnore() Attribut Test2List wenn Test2List null . Wenn es nicht null ist, dann möchte ich es in meinem JSON aufnehmen.




Um die sehr hilfreiche Antwort von GlennG leicht zu erklären (die Syntax von C # nach VB.Net zu übersetzen ist nicht immer "offensichtlich"), können Sie auch einzelne Klasseneigenschaften dekorieren, um zu verwalten, wie mit Nullwerten umgegangen wird. Wenn Sie dies tun, verwenden Sie nicht die globalen JsonSerializerSettings von GlennGs Vorschlag, sonst überschreibt es die einzelnen Dekorationen. Dies ist praktisch, wenn Sie möchten, dass ein NULL-Element in JSON angezeigt wird, sodass der Benutzer keine spezielle Behandlung vornehmen muss. Wenn der Verbraucher beispielsweise wissen muss, dass ein Array mit optionalen Elementen verfügbar ist, aber derzeit leer ist ... Die Dekore in der Eigenschaftsdeklaration sehen folgendermaßen aus:

<JsonPropertyAttribute("MyProperty", DefaultValueHandling:=NullValueHandling.Include)> Public Property MyProperty As New List(of String)

Für die 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 gut gestalten können (legen Sie sie einfach nebeneinander). Dies gibt mir die Möglichkeit, den XML-Serializer in dotnet oder den NewtonSoft-Serializer nach Belieben aufzurufen - beide arbeiten Seite an Seite und meine Kunden haben die Möglichkeit, mit XML oder JSON zu arbeiten. Das ist glatt wie Rotz auf einem Türknauf, da ich Kunden habe, die beide benötigen!




Sie können dies tun, um alle Nullen in einem Objekt zu ignorieren, das Sie serialisieren, und alle NULL-Eigenschaften werden dann nicht in JSON angezeigt

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
var myJson = JsonConvert.SerializeObject(myObject, settings);



var settings = new JsonSerializerSettings();
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
settings.NullValueHandling = NullValueHandling.Ignore;
//you can add multiple settings and then use it
var bodyAsJson = JsonConvert.SerializeObject(body, Formatting.Indented, settings);