Maison > développement back-end > C++ > Comment gérer les champs manquants lors de la désérialisation JSON dans Json.NET ?

Comment gérer les champs manquants lors de la désérialisation JSON dans Json.NET ?

Linda Hamilton
Libérer: 2025-01-19 05:44:12
original
463 Les gens l'ont consulté

How to Handle Missing Fields During JSON Deserialization in Json.NET?

Comment gérer les champs manquants lors de la désérialisation JSON dans Json.NET

Lors de la désérialisation d'objets JSON à l'aide de Json.NET, il est essentiel de gérer correctement les champs manquants. Par défaut, Json.NET ignore les propriétés manquantes et renvoie les valeurs par défaut, ce qui peut provoquer des erreurs lors du traitement ultérieur.

Considérez le code suivant :

<code class="language-csharp">using Newtonsoft.Json;

namespace Json_Fail_Test
{
    [JsonObject(MemberSerialization.OptOut)]
    private class MyJsonObjView
    {
        [JsonProperty("MyJsonInt")]
        public int MyJsonInt { get; set; }
    }

    static void Main(string[] args)
    {
        string correctData = @"{'MyJsonInt': 42}";
        string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}";

        var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData);
        var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData);

        Console.WriteLine(goodObj.MyJsonInt); // 输出 42
        Console.WriteLine(badObj.MyJsonInt); // 输出 0
    }
}</code>
Copier après la connexion

Ce code tente de désérialiser un objet JSON en un objet MyJsonObjView. Le JSON correct contient l'attribut "MyJsonInt", contrairement au JSON incorrect. Le résultat est le suivant :

<code>42
0</code>
Copier après la connexion

Comme vous pouvez le voir, le code échoue silencieusement lors de la désérialisation du mauvais JSON, renvoyant les valeurs par défaut pour les propriétés manquantes. Pour éviter un tel comportement, nous pouvons utiliser le paramètre MissingMemberHandling.

<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MissingMemberHandling = MissingMemberHandling.Error;</code>
Copier après la connexion

En définissant MissingMemberHandling sur Error, nous demandons à Json.NET de lever une exception lorsqu'une propriété manquante est rencontrée lors de la désérialisation.

<code class="language-csharp">try
{
    var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings);
    var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings);
}
catch (Exception ex)
{
    Console.WriteLine(ex.GetType().Name + ": " + ex.Message);
}</code>
Copier après la connexion

Maintenant, si nous désérialisons le mauvais JSON, nous obtiendrons une exception :

<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object
of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
Copier après la connexion

Cette exception indique clairement que la désérialisation a échoué en raison d'un attribut manquant, nous permettant de gérer l'erreur de manière appropriée.

En définissant l'attribut MissingMemberHandling, nous pouvons contrôler plus efficacement le comportement de Json.NET lors du traitement des attributs JSON manquants, évitant ainsi les erreurs potentielles et améliorant la robustesse de notre code.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal