Lors du traitement des données JSON, vous rencontrez souvent des situations où il existe à la fois des champs connus et des champs inconnus. Les champs connus peuvent être mappés à des propriétés spécifiques de la classe, tandis que les champs inconnus nécessitent un traitement spécial pour éviter la perte de données.
Une façon de gérer les champs inconnus consiste à exploiter un analyseur de contrat personnalisé dans JSON .NET. Cependant, y parvenir peut s’avérer difficile.
Le sérialiseur DataContract ne permet pas de remplacer la désérialisation, il ne convient donc pas à ce cas.
La sérialisation et la désérialisation en objets dynamiques peuvent apporter une solution, mais c'est un processus fastidieux et implique un post-traitement.
Hériter de la classe DynamicObject ne résout pas non plus le problème car le sérialiseur s'appuie sur la réflexion et n'appelle pas de méthodes personnalisées pour les objets dynamiques.
Au lieu d'utiliser des techniques complexes, pensez à JsonExtensionDataAttribute
en JSON .NET (version 5.0 et supérieure). Cet attribut permet de stocker des champs inconnus de manière anonyme dans des attributs de type IDictionary<string, JToken>
.
<code class="language-csharp">public class Product { public string id { get; set; } public string name { get; set; } [JsonExtensionData] public Dictionary<string, JToken> UnknownFields { get; set; } }</code>
En utilisant cette approche, les données JSON seront désérialisées avec succès et les champs connus et inconnus seront accessibles via l'instance de classe.
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!