J'utilise Json.NET pour sérialiser une classe en JSON.
J'ai la classe comme ça:
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; }
}
Je veux ajouter un JsonIgnore()
attribut à la Test2List
propriété uniquement lorsque l' Test2List
est null
. S'il n'est pas nul, je veux l'inclure dans mon json.
JsonSerializerSettings
pas dû utiliserJsonSerializer
car cela a montré une erreur pour le dernierUne solution alternative utilisant l'
JsonProperty
attribut:Comme vu dans ce document en ligne .
la source
[JsonObject]
, mais notez que le nom de l'attribut est différent. [réponse modifiée]Semblable à la réponse de @ sirthomas, JSON.NET respecte également la
EmitDefaultValue
propriété surDataMemberAttribute
:Cela peut être souhaitable si vous utilisez déjà
[DataContract]
et[DataMember]
dans votre type de modèle et que vous ne souhaitez pas ajouter d'attributs spécifiques à JSON.NET.la source
Tu peux écrire:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
Il prend également soin de ne pas sérialiser les propriétés avec des valeurs par défaut (pas seulement null). Cela peut être utile pour les énumérations par exemple.
la source
Vous pouvez le faire pour ignorer toutes les valeurs nulles dans un objet que vous sérialisez, et aucune propriété nulle n'apparaîtra alors dans le JSON
la source
Comme on peut le voir sur ce lien sur leur site (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx) I prise en charge en utilisant [Default ()] pour spécifier les valeurs par défaut
Tiré du lien
la source
Une adaptation à la réponse de @ Mrchief / @ amit, mais pour les personnes utilisant VB
Voir: "Initialiseurs d'objets: types nommés et anonymes (Visual Basic)"
https://msdn.microsoft.com/en-us/library/bb385125.aspx
la source
Dans .Net Core, c'est beaucoup plus facile maintenant. Dans votre startup.cs, ajoutez simplement les options json et vous pouvez y configurer les paramètres.
la source
Avec Json.NET
Le résultat sera:
la source
Avec
System.Text.Json
et .NET Core 3.0, cela a fonctionné pour moi:la source
Pour exposer légèrement la réponse très utile de GlennG (la traduction de la syntaxe de C # en VB.Net n'est pas toujours "évidente"), vous pouvez également décorer des propriétés de classe individuelles pour gérer la façon dont les valeurs nulles sont gérées. Si vous faites cela, n'utilisez pas le JsonSerializerSettings global de la suggestion de GlennG, sinon il remplacera les décorations individuelles. Cela est pratique si vous voulez qu'un élément nul apparaisse dans le JSON afin que le consommateur n'ait pas à faire de manipulation spéciale. Si, par exemple, le consommateur a besoin de savoir qu'un tableau d'éléments facultatifs est normalement disponible, mais est actuellement vide ... La décoration de la déclaration de propriété ressemble à ceci:
Pour les propriétés que vous ne souhaitez pas voir apparaître du tout dans la modification JSON : = NullValueHandling.Include to : = NullValueHandling.Ignore . Soit dit en passant - j'ai trouvé que vous pouvez très bien décorer une propriété pour la sérialisation XML et JSON (mettez-les juste à côté les unes des autres). Cela me donne la possibilité d'appeler le sérialiseur XML dans dotnet ou le sérialiseur NewtonSoft à volonté - les deux travaillent côte à côte et mes clients ont la possibilité de travailler avec XML ou JSON. C'est lisse comme morve sur une poignée de porte car j'ai des clients qui ont besoin des deux!
la source
Voici une option similaire, mais offrant un autre choix:
Ensuite, je l'utilise comme ceci:
La différence ici est que:
JsonSerializerSettings
chaque emplacement utilisé.la source
la source