Maison >développement back-end >C++ >Comment puis-je désérialiser JSON avec des champs inconnus à l'aide de ExtensionDataAttribute de JSON .NET ?

Comment puis-je désérialiser JSON avec des champs inconnus à l'aide de ExtensionDataAttribute de JSON .NET ?

DDD
DDDoriginal
2025-01-18 09:21:10808parcourir

How Can I Deserialize JSON with Unknown Fields Using JSON .NET's ExtensionDataAttribute?

Utilisez ExtensionDataAttribute de JSON .NET pour désérialiser les données JSON contenant des champs connus et inconnus

Lorsque le résultat JSON contient des champs connus et inconnus et que les noms de champs inconnus sont imprévisibles, ces champs inconnus doivent être mappés à un dictionnaire pour y accéder et les modifier. Pour cela, nous pouvons utiliser l'attribut JsonExtensionDataAttribute en JSON .NET.

Considérez la structure de classe suivante :

<code class="language-csharp">public class Product
{
    public string id { get; set; }
    public string name { get; set; }

    // 额外字段
    [JsonExtensionData]
    private IDictionary<string, JToken> _extraStuff;
}</code>

En appliquant JsonExtensionDataAttribute à l'attribut _extraStuff, nous pouvons demander à JSON .NET de mapper tous les champs inconnus à ce dictionnaire. JToken représente les données JSON brutes pour ce champ spécifique.

Lors de l'utilisation de cette classe pour désérialiser JSON :

<code class="language-json">{
    "id": "7908",
    "name": "product name",
    "unknown_field_1": "some value",
    "unknown_field_2": "some value"
}</code>
Le dictionnaire

dans l'objet Product_extraStuff sera automatiquement renseigné avec les paires clé-valeur suivantes :

<code class="language-csharp">{
    {"unknown_field_1", "some value"},
    {"unknown_field_2", "some value"}
}</code>

Cette approche fournit un moyen efficace de gérer les champs inconnus sans avoir besoin d'un analyseur de contrat personnalisé ou d'un héritage d'objet dynamique.

Remarque : La propriété JsonExtensionDataAttribute est disponible dans JSON .NET v5 version 5 et supérieure.

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