JsonException:el valor JSON no se pudo convertir a Enum

JsonException:el valor JSON no se pudo convertir a Enum

Cuando usa System.Text.Json para deserializar JSON que contiene la representación de cadena de una enumeración, obtiene la siguiente excepción:

El siguiente JSON causaría esta excepción. La conferencia es una enumeración y utiliza la representación de cadena "NFC" en lugar del valor numérico de la enumeración.

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

Solución

De forma predeterminada, System.Text.Json no maneja cadenas de enumeración.

Debe pasar un JsonStringEnumConverter a través de JsonSerializerOptions y pasar las opciones al deserializar:

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

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

El mismo problema ocurre con la serialización. Si no pasa el JsonStringEnumConverter, serializará los objetos con el valor numérico de enumeración, en lugar de su representación de cadena.