首頁 > 後端開發 > C++ > 如何在 JSON 反序列化過程中優雅地處理未知的枚舉值?

如何在 JSON 反序列化過程中優雅地處理未知的枚舉值?

Barbara Streisand
發布: 2025-01-01 11:02:09
原創
740 人瀏覽過

How to Gracefully Handle Unknown Enum Values During JSON Deserialization?

在JSON 反序列化期間忽略未知的枚舉值

將JSON 資料反序列化為枚舉時,可能會遇到JSON 屬性包含以下內容的情況與任何現有枚舉值都不符的值。預設情況下,這可能會導致錯誤。

TolerantEnumConverter 來救援

要優雅地處理此問題,您可以使用名為 TolerantEnumConverter 的自訂 JsonConverter。此轉換器透過定義一組規則提供了一種靈活的方法來處理未知枚舉值:

  1. 如果 JSON 值與現有枚舉值匹配,則使用它。
  2. 如果枚舉是可空且 JSON 值為空,則將其設為空。
  3. 如果枚舉具有名為「Unknown」的值,則它是
  4. 否則,使用枚舉的第一個值。

實作細節

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板