¿Cómo deserializo una matriz de enumeración usando Json.Net?

Tengo un JSON como este:

[{ 
    "agencyId": "myCity",
    "road": {
    "note": "",
        "lat": "45.321",
        "lon": "12.21",
        "streetCode": "290",
        "street": "street1",
        "fromNumber": "",
        "toNumber": "",
        "fromIntersection": "",
        "toIntersection": ""
    },
    "changeTypes": ["PARKING_BLOCK", "ROAD_BLOCK"],
},]

y una clase como esta:

public class AlertRoad : BaseAlert
{
    [JsonProperty("agencyId")]
    [JsonConverter(typeof(StringEnumConverter))]
    public AgencyType AgencyId { get; set; }

    [JsonProperty("changeTypes")]
    [JsonConverter(typeof(StringEnumConverter))]
    public ChangeType[] ChangeTypes { get; set; }

    [JsonProperty("road")]
    public Road RoadInfo { get; set; }
}

AgencyType es una enumeración, deserialización y serialización para trabajos de AgencyId.

ChangeType es otra enumeración, pero la deserialización y serialización para ChangeTypes no funciona. Supongo que la razón es que ChangeTypes es una matriz de valores de enumeración.

La pregunta es: ¿cómo puedo deserializar / serializar el campo ChangeTypes o, en general, una matriz de valores de enumeración?

Intenté definiendo mi propio convertidor de campo, llamado ChangeTypeConverter, y cambiando StrinEnumConverter a ChangeTypeConverter para el campo ChangeTypes, pero en la función ReadJson el valor del lector es nulo.

public class ChangeTypeConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {

    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var val = reader.Value;
        //val is null?!?
        return val;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(ChangeType);
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta