Maison > développement back-end > C++ > Comment gérer gracieusement les valeurs d'énumération inconnues lors de la désérialisation JSON ?

Comment gérer gracieusement les valeurs d'énumération inconnues lors de la désérialisation JSON ?

Barbara Streisand
Libérer: 2025-01-01 11:02:09
original
717 Les gens l'ont consulté

How to Gracefully Handle Unknown Enum Values During JSON Deserialization?

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

Lorsque vous désérialisez des données JSON dans une énumération, il est possible de rencontrer des situations où la propriété JSON contient des valeurs qui ne correspondent à aucune valeur d'énumération existante. Par défaut, cela peut provoquer des erreurs.

TolerantEnumConverter à la rescousse

Pour gérer cela avec élégance, vous pouvez utiliser un JsonConverter personnalisé appelé TolerantEnumConverter. Ce convertisseur offre une approche flexible pour gérer les valeurs d'énumération inconnues en définissant un ensemble de règles :

  1. Si la valeur JSON correspond à une valeur d'énumération existante, elle est utilisée.
  2. Si l'énumération est nullable et que la valeur JSON est nulle, elle est définie sur null.
  3. Si l'énumération a une valeur appelée "Inconnu", elle est utilisé.
  4. Sinon, la première valeur de l'énumération est utilisée.

Détails d'implémentation

Le TolerantEnumConverter gère à la fois les valeurs de chaîne et les valeurs entières en JSON. Il vérifie les correspondances en fonction de comparaisons de chaînes insensibles à la casse ou de la présence dans l'ensemble de valeurs d'énumération.

Exemple d'utilisation

Pour utiliser TolerantEnumConverter, annotez vos propriétés d'énumération avec l'attribut [JsonConverter(typeof(TolerantEnumConverter))] . Voici un exemple :

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    Ready = 1,
    Set = 2,
    Go = 3,
}
Copier après la connexion

Application de démonstration

L'application de démonstration suivante montre comment utiliser TolerantEnumConverter pour gérer à la fois les valeurs non nullables et nullables. enums :

// Sample JSON data
string json = @"
{
    ""NonNullableStatusWithValidStringValue"" : ""Set"",
    ""NonNullableStatusWithInvalidStringValue"" : ""Blah"",
    ""NullableStatusWithValidStringValue"" : ""Go"",
    ""NullableStatusWithInvalidStringValue"" : ""Blah"",
}";

// Deserialize JSON data into Foo object
Foo foo = JsonConvert.DeserializeObject<Foo>(json, new JsonSerializerSettings
{
    Converters = { new TolerantEnumConverter() }
});

// Output the deserialized values
foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    Console.WriteLine(prop.Name + ": " + (prop.GetValue(foo) ?? "(null)"));
}
Copier après la connexion

Sortie :

NonNullableStatusWithValidStringValue: Set
NonNullableStatusWithInvalidStringValue: Ready
NullableStatusWithValidStringValue: Go
NullableStatusWithInvalidStringValue: (null)
Copier après la connexion

Conclusion

Le TolerantEnumConverter fournit un moyen pratique de désérialiser les données JSON en énumérations sans rencontrer d'erreurs pour les valeurs inconnues. Il offre un comportement personnalisable pour répondre à vos besoins spécifiques.

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