¿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);
}
}