Maison > développement back-end > C++ > Comment puis-je détecter les propriétés non définies lors de la désérialisation JSON avec Json.NET ?

Comment puis-je détecter les propriétés non définies lors de la désérialisation JSON avec Json.NET ?

DDD
Libérer: 2025-01-19 02:51:08
original
701 Les gens l'ont consulté

How Can I Detect Undefined Properties During JSON Deserialization with Json.NET?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal