Maison >développement back-end >C++ >Comment gérer les erreurs de désérialisation JSON avec des valeurs d'énumération incompatibles ?
Surmonter les erreurs de désérialisation JSON avec des valeurs d'énumération inconnues
Lorsque vous traitez la sérialisation et la désérialisation JSON, il n'est pas rare de rencontrer des situations où vos valeurs d'énumération ne correspondent pas aux valeurs de chaîne fournies dans la propriété JSON. Cela peut entraîner la levée d'exceptions lors de la désérialisation, perturbant le flux de votre application.
Pour relever ce défi, nous pouvons utiliser un JsonConverter personnalisé avec une gestion flexible des valeurs d'énumération. Le TolerantEnumConverter peut gérer divers scénarios, vous permettant de personnaliser le comportement en fonction de vos besoins.
Fonctionnalité du convertisseur :
Code Exemple :
class TolerantEnumConverter : JsonConverter { // Handle deserialization for enum types public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // Get the underlying type for nullable types Type enumType = IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType; // Attempt to match the JSON value to an enum value string[] names = Enum.GetNames(enumType); string enumText = reader.Value.ToString(); string match = names .Where(n => string.Equals(n, enumText, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (match != null) { return Enum.Parse(enumType, match); } // Handle nullable types if (IsNullableType(objectType)) { return null; } // Handle enums with an "Unknown" value string defaultName = names .Where(n => string.Equals(n, "Unknown", StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); return Enum.Parse(enumType, defaultName ?? names.First()); } }
Utilisation :
Pour utiliser le convertisseur, décorez vos propriétés d'énumération avec l'attribut [JsonConverter] :
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3 }
En tirant parti de TolerantEnumConverter, vous pouvez vous assurer que votre application gère correctement les incompatibilités de valeurs d'énumération pendant JSON. désérialisation, évitant les erreurs inutiles et préservant l'intégrité des données.
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!