Mam JSON tak:W jaki sposób deserializować tablicę wyliczeń przy użyciu Json.Net?
[{
"agencyId": "myCity",
"road": {
"note": "",
"lat": "45.321",
"lon": "12.21",
"streetCode": "290",
"street": "street1",
"fromNumber": "",
"toNumber": "",
"fromIntersection": "",
"toIntersection": ""
},
"changeTypes": ["PARKING_BLOCK", "ROAD_BLOCK"],
},]
i klasę tak:
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 jest wyliczenie i deserializiation i serializacji dla AgencyId działa.
ChangeType to kolejne wyliczenie, ale deserializacja i serializacja dla ChangeTypes nie działa. Zakładam, że powodem jest to, że ChangeTypes to tablica wartości wyliczeniowych.
Pytanie brzmi: w jaki sposób można deserializować/serializować pole ChangeTypes lub ogólnie tablicę wartości wyliczeniowych?
Próbowałem przez zdefiniowanie mojego własnego konwertera pól o nazwie ChangeTypeConverter i zmianę parametru StrinEnumConverter na ChangeTypeConverter dla pola ChangeTypes, ale w funkcji ReadJson wartość czytnika jest zerowa.
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);
}
}