JsonException:JSON 値を Enum に変換できませんでした

System.Text.Json を使用して列挙型の文字列表現を含む JSON を逆シリアル化すると、次の例外が発生します:

次の JSON では、この例外が発生します。会議は列挙型であり、これは列挙型の数値の代わりに文字列表現「NFC」を使用しています。

{
  "TeamName": "Detroit Lions",
  "Conference": "NFC"
}
Code language: JSON / JSON with Comments (json)

解決策

デフォルトでは、System.Text.Json は列挙型文字列を処理しません。

JsonSerializerOptions を介して JsonStringEnumConverter を渡し、デシリアライズ時にオプションを渡す必要があります。

var options = new JsonSerializerOptions();
options.Converters.Add(new JsonStringEnumConverter());

var team = JsonSerializer.Deserialize<NFLTeam>(json, options);
Code language: C# (cs)

シリアル化でも同じ問題が発生します。 JsonStringEnumConverter を渡さない場合、文字列表現ではなく列挙型の数値でオブジェクトをシリアル化します。