JsonException:non è stato possibile convertire il valore JSON in Enum

JsonException:non è stato possibile convertire il valore JSON in Enum

Quando utilizzi System.Text.Json per deserializzare JSON che contiene la rappresentazione di stringa di un enum, ottieni la seguente eccezione:

Il seguente JSON causerebbe questa eccezione. Conference è un enum e utilizza la rappresentazione di stringa "NFC" invece del valore numerico dell'enumerazione.

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

Soluzione

Per impostazione predefinita, System.Text.Json non gestisce le stringhe enum.

Devi passare un JsonStringEnumConverter tramite JsonSerializerOptions e passare le opzioni durante la deserializzazione:

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

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

Lo stesso problema si verifica per la serializzazione. Se non si passa JsonStringEnumConverter, serializzerà gli oggetti con il valore numerico enum, invece della loro rappresentazione di stringa.