解析JSON 資料時,必須處理提供的枚舉值與程式庫中定義的枚舉值不匹配的情況。當第三方 API 隨著時間的推移引入新的枚舉值時,通常會發生這種情況。
解決方案:自訂JsonConverter
要解決此問題,您可以建立自訂JsonConverter:
class TolerantEnumConverter : JsonConverter { // ... Implementation ... }
該轉換器通過以下方式簡化了反序列化過程邏輯:
範例用法:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready, Set, Go } string json = @"{ ""status"": ""SomethingElse"" }"; var status = JsonConvert.DeserializeObject<Status>(json); // Returns "Ready"
可空枚舉與「未知」值:
可空枚舉與「未知」值:
[JsonConverter(typeof(TolerantEnumConverter))] enum Color { Red, Yellow, Green, Unknown = 99 } string colorJson = @"{ ""color"": ""Purple"" }"; var color = JsonConvert.DeserializeObject<Color?>(colorJson); // Returns null
處理具有未知值的可為空枚舉,您可以在枚舉定義中新增「未知」值。例如:
結論:
利用此處提供的自訂JsonConverter,即使枚舉值隨時間變化,您也可以確保JSON 反序列化順利進行,防止錯誤並保持資料完整性。以上是反序列化 JSON 時如何處理未知的枚舉值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!