Ich habe einige Daten, die ich in JSON serialisieren muss. Ich benutze JSON.NET. Meine Codestruktur ähnelt der folgenden:
public struct structA
{
public string Field1;
public structB Field2;
public structB Field3;
}
public struct structB
{
public string Subfield1;
public string Subfield2;
}
Das Problem ist, dass meine JSON-Ausgabe NUR Field1
ODER Field2
ODER haben muss Field3
- es hängt davon ab, welches Feld verwendet wird (dh nicht null). Standardmäßig sieht mein JSON folgendermaßen aus:
{
"Field1": null,
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {"Subfield1": null, "Subfield2": null},
}
Ich weiß, dass ich verwenden kann NullValueHandling.Ignore
, aber das gibt mir JSON, das so aussieht:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {}
}
Und was ich brauche ist folgendes:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}
Gibt es einen einfachen Weg, dies zu erreichen?
Antworten:
Ja, Sie müssen verwenden
JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
.Aber weil structs Werttypen sind brauchen Sie Field2, Field3 markieren nullable zu erhalten das erwartete Ergebnis:
public struct structA { public string Field1; public structB? Field2; public structB? Field3; }
Oder verwenden Sie einfach Klassen anstelle von Strukturen.
Dokumentation: NullValueHandling Enumeration
quelle
Sie können das JsonProperty-Attribut auch auf die relevanten Eigenschaften anwenden und die Behandlung mit Nullwerten auf diese Weise festlegen. Beziehen Sie sich auf die
Reference
Eigenschaft im folgenden Beispiel:Hinweis: Das
JsonSerializerSettings
überschreibt die Attribute.public class Person { public int Id { get; set; } [JsonProperty( NullValueHandling = NullValueHandling.Ignore )] public int? Reference { get; set; } public string Name { get; set; } }
Hth.
quelle