Maison >développement back-end >C++ >Comment puis-je détecter les champs manquants lors de la désérialisation JSON avec JsonConvert ?
La gestion des champs manquants est essentielle pour garantir l'intégrité et la cohérence des données lors de la désérialisation d'objets JSON à l'aide de la classe JsonConvert de Json.NET. Par défaut, MissingMemberHandling est défini sur Ignore, ce qui oblige le désérialiseur à renvoyer silencieusement les valeurs par défaut pour les propriétés manquantes. Pour effectuer une validation stricte et détecter les erreurs, définissez MissingMemberHandling sur Error.
Considérez le code suivant :
<code class="language-csharp">using System; using Newtonsoft.Json; namespace Json_Fail_Test { [JsonObject(MemberSerialization.OptOut)] public class MyJsonObjView { [JsonProperty("MyJsonInt")] public int MyJsonInt { get; set; } } class Program { const string correctData = @"{ 'MyJsonInt': 42 }"; const string wrongData = @"{ 'SomeOtherProperty': 'fbe8c20b' }"; static void Main() { try { JsonSerializerSettings settings = new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Error }; var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings); Console.WriteLine(goodObj.MyJsonInt.ToString()); var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings); Console.WriteLine(badObj.MyJsonInt.ToString()); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name + ": " + ex.Message); } } } }</code>
Définir MissingMemberHandling sur Error lèvera une JsonSerializationException lorsqu'une propriété est manquante dans les données JSON.
<code>42 JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
En configurant MissingMemberHandling comme Error, Json.NET impose le strict respect de la structure de classe définie lors de la désérialisation. Cela permet d'identifier et de prévenir d'éventuelles pertes ou corruptions de données dues à des champs manquants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!