Maison >développement back-end >C++ >Comment puis-je faire en sorte que Json.NET lève des exceptions pour les champs manquants lors de la désérialisation ?
Détection des champs manquants lors de la désérialisation JSON à l'aide de Json.NET
Dans la désérialisation JSON, la gestion des champs manquants est cruciale. Par défaut, le sérialiseur de Json.NET renvoie silencieusement une valeur par défaut lorsqu'il rencontre un champ manquant. Ce comportement peut provoquer des erreurs non détectées lors de la désérialisation d'objets dotés de propriétés incorrectes.
Question :
Vous rencontrez un problème où le sérialiseur Json.NET ne lève pas d'exception lors de la désérialisation d'un objet avec des champs manquants. Au lieu de cela, il renvoie les valeurs par défaut, ce qui rend difficile la détection de données incorrectes.
Solution :
Json.NET fournit un paramètre MissingMemberHandling
configurable. En le définissant sur Error
, vous demandez au sérialiseur d'augmenter JsonSerializationException
lorsqu'un champ manquant est rencontré lors de la désérialisation. De cette façon, vous pouvez gérer ces erreurs explicitement dans votre code.
Code :
<code class="language-csharp">using Newtonsoft.Json; try { // 读取JSON字符串 const string correctData = @"{ 'MyJsonInt': 42 }"; const string wrongData = @"{ 'SomeOtherProperty': 'fbe8c20b' }"; // 创建序列化器设置 JsonSerializerSettings settings = new JsonSerializerSettings(); settings.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>
Sortie :
<code>42 JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
En définissant MissingMemberHandling
sur Error
, nous garantissons que le sérialiseur lancera JsonSerializationException
pour les objets avec des champs manquants, vous permettant de gérer les erreurs et de 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!