克服未知枚举值的 JSON 反序列化错误
在处理 JSON 序列化和反序列化时,遇到枚举值不正确的情况并不罕见与 JSON 属性中提供的字符串值不匹配。这可能会导致反序列化期间引发异常,从而扰乱应用程序的流程。
为了解决这一挑战,我们可以利用自定义 JsonConverter 来灵活处理枚举值。 TolerantEnumConverter 可以处理各种场景,允许您根据需要自定义行为。
转换器功能:
代码示例:
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()); } }
用法:
要使用转换器,请使用 [JsonConverter] 属性装饰枚举属性:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3 }
通过利用 TolerantEnumConverter,您可以确保您的应用程序正常处理枚举JSON 反序列化期间的值不匹配,防止不必要的错误并保持数据完整性。
以上是如何处理枚举值不匹配的 JSON 反序列化错误?的详细内容。更多信息请关注PHP中文网其他相关文章!