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 ?

Comment puis-je faire en sorte que Json.NET lève des exceptions pour les champs manquants lors de la désérialisation ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-19 05:59:10682parcourir

How Can I Make Json.NET Throw Exceptions for Missing Fields During Deserialization?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn