How do I deserialize an array of enum using Json.Net?
There is no need to write a custom JsonConverter for serializing/deserializing array of Enum. Instead of decorating individual property within parent model, just decorate the Enum with a StringEnumConverter JsonConverter attribute.
For eg:-
Following Environment model has Shelter enum property and array of enum Shelter[]
public class Environment
{
public string Name { get; set; }
public Shelter Shelter { get; set; }
public Shelter[] Shelters { get; set; }
}
[JsonConverter(typeof(StringEnumConverter))]
public enum Shelter
{
Indoor,
Outdoor
}
Output json:-
{
"name": "",
"shelter": "Indoor",
"shelters": [
"Indoor",
"Outdoor"
]
}
The StringEnumConverter
expects only a single enumeration value. Because ChangeTypes
is an array, you need to annotate the property a little differently to make it work.
Try this instead:
[JsonProperty("changeTypes", ItemConverterType=typeof(StringEnumConverter))]
public ChangeType[] ChangeTypes { get; set; }