733 Stimmen

Wie ignoriert man eine Eigenschaft in einer Klasse, wenn sie null ist, mit json.net

Ich verwende Json.NET um eine Klasse in JSON zu serialisieren.

Ich habe die Klasse so angelegt:

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 eine JsonIgnore() Attribut zu Test2List Eigenschaft nur, wenn Test2List es null . Wenn es nicht null ist, dann möchte ich es in meinem json enthalten.

1272voto

sirthomas Punkte 11526

Eine alternative Lösung unter Verwendung der JsonProperty Attribut:

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

// or for all properties in a class
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]

Gesehen in dieses Online-Dokument .

868voto

Mrchief Punkte 72978

Laut James Newton King: Wenn Sie den Serializer selbst erstellen und nicht JavaScriptConvert verwenden, gibt es eine NullValueHandling Eigenschaft die Sie ignorieren können.

Hier ist ein Beispiel:

JsonSerializer _jsonWriter = new JsonSerializer {
                                 NullValueHandling = NullValueHandling.Ignore
                             };

Alternativ dazu, wie von @amit vorgeschlagen

JsonConvert.SerializeObject(myObject, 
                            Newtonsoft.Json.Formatting.None, 
                            new JsonSerializerSettings { 
                                NullValueHandling = NullValueHandling.Ignore
                            });

81voto

Tobias J Punkte 14467

JSON.NET respektiert auch die EmitDefaultValue Eigenschaft en DataMemberAttribute für den Fall, dass Sie keine Newtonsoft-spezifischen Attribute zu Ihrem Modell hinzufügen möchten:

[DataMember(Name="property_name", EmitDefaultValue=false)]

47voto

Vatsal Patel Punkte 541

Sie können schreiben: [JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]

Es sorgt auch dafür, dass Eigenschaften mit Standardwerten (nicht nur null) nicht serialisiert werden. Dies kann zum Beispiel für Enums nützlich sein.

39voto

Brugner Punkte 387

In meinem Fall, der .NET 6 verwendet, war dies die Lösung:

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]

Mehr Infos aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X