Maison >développement back-end >C++ >Comment puis-je détecter les champs manquants lors de la désérialisation JSON avec JsonConvert ?

Comment puis-je détecter les champs manquants lors de la désérialisation JSON avec JsonConvert ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 05:50:09398parcourir

How Can I Detect Missing Fields During JSON Deserialization with JsonConvert?

Utilisez JsonConvert pour détecter les champs manquants lors de la désérialisation

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.

Exemple

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>

Résultats

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>

Conclusion

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!

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