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
Linda Hamiltonoriginal
2025-01-19 05:44:12465parcourir

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>

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>

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>

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>

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>

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!

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