在JSON 反序列化期間忽略未知的枚舉值
將JSON 資料反序列化為枚舉時,可能會遇到JSON 屬性包含以下內容的情況與任何現有枚舉值都不符的值。預設情況下,這可能會導致錯誤。
TolerantEnumConverter 來救援
要優雅地處理此問題,您可以使用名為 TolerantEnumConverter 的自訂 JsonConverter。此轉換器透過定義一組規則提供了一種靈活的方法來處理未知枚舉值:
實作細節
TolerantEnumConverter 處理字串和整數值在 JSON 中。它根據不區分大小寫的字串比較或枚舉值集中是否存在來檢查匹配項。
範例用法
若要使用 TolerantEnumConverter,請使用下列指令註解您的枚舉屬性[JsonConverter(typeof(TolerantEnumConverter))] 屬性。以下是範例:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3, }
示範應用程式
以下示範應用程式示範如何使用 TolerantEnumConverter處理不可為空和可為空的情況枚舉:
// 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)")); }
輸出:
NonNullableStatusWithValidStringValue: Set NonNullableStatusWithInvalidStringValue: Ready NullableStatusWithValidStringValue: Go NullableStatusWithInvalidStringValue: (null)
結論
TolerEnumConverter 提供了一張照片種將JSON 資料反序列化為枚舉的便捷方法,而不會遇到錯誤對於未知值。它提供可自訂的行為來滿足您的特定需求。
以上是如何在 JSON 反序列化過程中優雅地處理未知的枚舉值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!