Lors de l’utilisation de Json.NET pour désérialiser une chaîne JSON en un object, comment puis-je exiger qu’une clé / propriété soit présente dans l’agitation JSON, tout en autorisant les valeurs NULL?
Par exemple:
Disons que j’ai une classe / un object …
[DataContract] public class Car { [DataMember(IsRequired = true)] public ssortingng Vin {get; set;} [DataMember(IsRequired = true)] public ssortingng Color {get; set;} public ssortingng Description {get; ;set} }
Dans l’exemple ci-dessus, le NIV et la couleur sont obligatoires, et une exception serait levée si l’un d’eux est absent de la chaîne JSON. Mais disons que le fait que la propriété Description ait ou non une valeur après la désérialisation est facultatif. En d’autres termes, NULL est une valeur valide. Il existe deux manières de rendre cela possible dans la chaîne JSON:
1)
{ "vin": "blahblahblah7", "color": "blue", "description": null }
ou 2)
{ "vin": "blahblahblah7", "color": "blue" }
Le problème est que je ne veux pas supposer que la valeur Description doit être NULL simplement parce que la paire clé / valeur pour a été laissée en dehors de la chaîne JSON. Je veux que l’expéditeur du JSON soit explicite sur la définition de NULL. Si le scénario n ° 2 devait se produire, je souhaite le détecter et répondre par un message d’erreur. Alors, comment puis-je exiger que la paire clé / valeur soit présente, mais accepter NULL comme valeur?
Si cela peut vous aider, j’essaie de résoudre ce problème dans le contexte d’un projet API Web ASP.NET .
Pouah. J’aurais dû passer un peu plus de temps dans la documentation Json.NET …
La réponse est la propriété Required
de JsonPropertyAtsortingbute
, qui est de type enum
Newtonsoft.Json.Required
[JsonProperty(Required = Newtonsoft.Json.Required.AllowNull)] public ssortingng Description {get; set;}
Je pense que vous recherchez le fichier DefaultValueAtsortingbute http://james.newtonking.com/projects/json/help/index.html?topic=html/T_Newtonsoft_Json_DefaultValueHandling.htm
La vraie question est la suivante: pourquoi voulez-vous forcer l’expéditeur à définir la valeur null sur certaines valeurs? Lors de la création d’une application, vous ne pouvez jamais forcer les utilisateurs à se comporter. C’est la fenêtre numéro 1 pour le piratage de votre application.
Supposez toujours que les utilisateurs ne feront pas ce que vous voulez à un moment donné. Si ce JSON provient d’une autre application que vous possédez, faites simplement en sorte qu’il envoie la valeur null, si c’est une application externe ou une entrée utilisateur suppose que tout est possible.
Et Required ne signifie pas que le champ est obligatoire dans l’entrée, cela signifie qu’il nécessite une valeur . C’est ton problème.