首頁 > 後端開發 > C++ > 如何使用 Json.net 在 JSON 反序列化過程中處理未知的枚舉值?

如何使用 Json.net 在 JSON 反序列化過程中處理未知的枚舉值?

Linda Hamilton
發布: 2025-01-05 13:27:41
原創
925 人瀏覽過

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

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

問題:

使用Json 進行JSON 反序列化。當在 JSON 資料中遇到未知的枚舉值時,net 可能會引發異常。當基於目前文件建立枚舉,但第三方 API 後來添加新的枚舉值時,就會發生這種情況。

解決方案:自訂 JsonConverter

解決此問題,可以使用自訂的 JsonConverter。它的工作原理如下:

  • 如果 JSON 值與枚舉(字串或整數)匹配,則使用它。
  • 如果枚舉可為空,則該值設為 null。
  • 如果枚舉具有「未知」值,則使用它。
  • 否則,使用枚舉的第一個值。

程式碼實作:

class TolerantEnumConverter : JsonConverter
{
    ... (Implementation from the provided answer)
}
登入後複製

用法:

應用枚舉類型的[JsonConverter(JsonJson (TolerantEnumConverter))]屬性在反序列化過程中使用自訂轉換器:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}
登入後複製

範例示範:

以下程式碼片段示範如何使用具有不同枚舉值和JSON 的TolerantEnumConverter輸入:

string json = @"
{
    ... (JSON data with valid and invalid enum values)
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json);

foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    object val = prop.GetValue(foo, null);
    Console.WriteLine(prop.Name + ": " + 
                     (val == null ? "(null)" : val.ToString()));
}
登入後複製

輸出:

控制台輸出顯示TolerantEnumConverter 如何處理未知枚舉值,包括將值設為「(null)」、「(null)」、「 Unknown” ,或使用枚舉的第一個值。

以上是如何使用 Json.net 在 JSON 反序列化過程中處理未知的枚舉值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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