When you’re using System.Text.Json to deserialize JSON that contains the string representation of an enum, you get the following exception:
System.Text.Json.JsonException: The JSON value could not be converted to <Enum Type>
The following JSON would cause this exception. Conference is an enum, and this is using the string representation “NFC” instead of the numeric value of the enum.
{
"TeamName": "Detroit Lions",
"Conference": "NFC"
}
Code language: JSON / JSON with Comments (json)
Solution
By default, System.Text.Json doesn’t handle enum strings.
You need to pass in a JsonStringEnumConverter via JsonSerializerOptions, and pass in the options when deserializing:
var options = new JsonSerializerOptions();
options.Converters.Add(new JsonStringEnumConverter());
var team = JsonSerializer.Deserialize<NFLTeam>(json, options);
Code language: C# (cs)
The same problem happens when an object has an enum property and you serialize it to JSON. If you don’t pass in the JsonStringEnumConverter, it’ll serialize objects with the enum numeric value, instead of their string representation.
Comments are closed.