J'ai des données que je dois sérialiser en JSON. J'utilise JSON.NET. Ma structure de code est similaire à ceci:
public struct structA
{
public string Field1;
public structB Field2;
public structB Field3;
}
public struct structB
{
public string Subfield1;
public string Subfield2;
}
Le problème est que ma sortie JSON doit avoir SEULEMENT Field1
OR Field2
OR Field3
- cela dépend du champ utilisé (c'est-à-dire non nul). Par défaut, mon JSON ressemble à ceci:
{
"Field1": null,
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {"Subfield1": null, "Subfield2": null},
}
Je sais que je peux utiliser NullValueHandling.Ignore
, mais cela me donne un JSON qui ressemble à ceci:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {}
}
Et ce dont j'ai besoin c'est:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}
Existe-t-il un moyen simple d'y parvenir?
Oui, vous devez utiliser JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
.
Mais parce que les structures sont des types de valeur vous devez marquer Field2, Field3 nullable pour obtenir le résultat attendu:
public struct structA
{
public string Field1;
public structB? Field2;
public structB? Field3;
}
Ou utilisez simplement des classes au lieu de structures.
Documentation: NullValueHandling, énumération
Vous pouvez également appliquer l'attribut JsonProperty aux propriétés pertinentes et définir la valeur nulle de cette manière. Reportez-vous à la propriété Reference
dans l'exemple ci-dessous:
Remarque: le JsonSerializerSettings
remplacera les attributs.
public class Person
{
public int Id { get; set; }
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference { get; set; }
public string Name { get; set; }
}
Hth.