克服未知枚舉值的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中文網其他相關文章!