Utiliser Json.NET pour détecter les propriétés non définies après la désérialisation
Dans les applications basées sur JSON, il est essentiel de gérer efficacement les erreurs de désérialisation. Bien que le comportement par défaut de Json.NET consiste à revenir silencieusement aux valeurs par défaut, il existe des situations dans lesquelles des exceptions doivent être levées.
Pour répondre à ce besoin, Json.NET fournit des MissingMemberHandling
paramètres. En définissant cette propriété sur Error
, toute tentative de désérialisation d'une propriété JSON sans propriété de modèle correspondante déclenchera JsonSerializationException
.
Considérez le code suivant :
<code class="language-csharp">using Newtonsoft.Json; using System; namespace JsonFailTest { [JsonObject(MemberSerialization.OptOut)] public class MyJsonObjView { [JsonProperty("MyJsonInt")] public int MyJsonInt { get; set; } } public static class Program { public static void Main(string[] args) { string correctData = @"{'MyJsonInt': 42}"; string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}"; var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData); Console.WriteLine(goodObj.MyJsonInt); try { JsonSerializerSettings settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error }; var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings); Console.WriteLine(badObj.MyJsonInt); } catch (Exception ex) { Console.WriteLine($"{ex.GetType().Name}: {ex.Message}"); } } } }</code>
Avec ce code modifié, la désérialisation de l'objet wrongData
entraînera désormais l'erreur suivante :
<code>System.Runtime.Serialization.Json.JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
Ce message d'erreur identifie clairement la propriété qui a provoqué l'échec de la désérialisation, rendant le débogage plus efficace. En utilisant le paramètre MissingMemberHandling
, vous pouvez forcer une validation stricte des attributs pendant la désérialisation pour garantir l'intégrité des données.
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!