Maison > développement back-end > C++ > Comment gérer les valeurs Enum inconnues lors de la désérialisation JSON avec Json.net ?

Comment gérer les valeurs Enum inconnues lors de la désérialisation JSON avec Json.net ?

Linda Hamilton
Libérer: 2025-01-05 13:27:41
original
925 Les gens l'ont consulté

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

Ignorer les valeurs d'énumération inconnues lors de la désérialisation JSON

Problème :

Désérialisation JSON avec Json. net peut lever des exceptions lorsqu'il rencontre des valeurs d'énumération inconnues dans les données JSON. Cela se produit lorsqu'une énumération est créée sur la base de la documentation actuelle, mais que l'API tierce ajoute ultérieurement de nouvelles valeurs d'énumération.

Solution : JsonConverter personnalisé

Pour résoudre ce problème , un JsonConverter personnalisé peut être utilisé. Voici comment cela fonctionne :

  • Si la valeur JSON correspond à l'énumération (chaîne ou entier), elle est utilisée.
  • Si l'énumération est nullable, la valeur est définie sur null.
  • Si l'énumération est nullable, la valeur est définie sur null.
  • Si l'énumération a une valeur "Inconnu", elle est utilisée.
Sinon, la première valeur de l'énumération enum est utilisé.

Implémentation du code :
class TolerantEnumConverter : JsonConverter
{
    ... (Implementation from the provided answer)
}
Copier après la connexion

Utilisation :

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}
Copier après la connexion
Appliquer le [JsonConverter( typeof(TolerantEnumConverter))] attribut au type enum pour utiliser le convertisseur personnalisé pendant désérialisation :

Exemple de démonstration :

string json = @"
{
    ... (JSON data with valid and invalid enum values)
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json);

foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    object val = prop.GetValue(foo, null);
    Console.WriteLine(prop.Name + ": " + 
                     (val == null ? "(null)" : val.ToString()));
}
Copier après la connexion
L'extrait de code suivant montre l'utilisation de TolerantEnumConverter avec différentes valeurs d'énumération et JSON entrées :

Sortie :

La sortie de la console montre comment TolerantEnumConverter gère les valeurs d'énumération inconnues, y compris la définition des valeurs sur "(null)", "Unknown" , ou en utilisant la première valeur de l'énumération.

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