JsonException:Der JSON-Wert konnte nicht in Enum konvertiert werden

JsonException:Der JSON-Wert konnte nicht in Enum konvertiert werden

Wenn Sie System.Text.Json verwenden, um JSON zu deserialisieren, das die Zeichenfolgendarstellung einer Aufzählung enthält, erhalten Sie die folgende Ausnahme:

Das folgende JSON würde diese Ausnahme verursachen. Konferenz ist eine Aufzählung, und diese verwendet die Zeichenfolgendarstellung „NFC“ anstelle des numerischen Werts der Aufzählung.

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

Lösung

Standardmäßig verarbeitet System.Text.Json keine Enum-Strings.

Sie müssen einen JsonStringEnumConverter über JsonSerializerOptions übergeben und die Optionen beim Deserialisieren übergeben:

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

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

Das gleiche Problem tritt bei der Serialisierung auf. Wenn Sie JsonStringEnumConverter nicht übergeben, werden Objekte mit dem numerischen Enum-Wert anstelle ihrer Zeichenfolgendarstellung serialisiert.