JSON 逆シリアル化中の不明な列挙値の無視
問題:
JSON を使用した JSON 逆シリアル化。 JSON で不明な列挙値が検出された場合、net は例外をスローする可能性があります データ。この問題は、列挙型が現在のドキュメントに基づいて作成された場合に発生しますが、サードパーティ API によって後で新しい列挙値が追加されました。
解決策: Custom JsonConverter
この問題を解決するには、カスタム JsonConverter を使用できます。その仕組みは次のとおりです。
コードの実装:
class TolerantEnumConverter : JsonConverter { ... (Implementation from the provided answer) }
使用法:
を適用します[JsonConverter(typeof(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())); }
出力:
コンソール出力には、値を「(null)」、「Unknown」に設定するなど、TolerantEnumConverter が不明な列挙値をどのように処理するかが示されます。 、または列挙型の最初の値を使用します。
以上がJson.netでのJSON逆シリアル化中に不明な列挙値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。