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
Linda Hamiltonoriginal
2025-01-05 13:27:411015parcourir

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)
}

Utilisation :

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}
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()));
}
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!

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