Wie kann ich Deserialisieren, die ein array von enum verwenden Json.Net?

Habe ich eine JSON-so:

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

und eine Klasse wie folgt aus:

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 ist eine Aufzählung, und deserializiation und Serialisierung für die AgencyId funktioniert.

ChangeType ist eine weitere Aufzählung, aber deserializiation und Serialisierung für ChangeTypes nicht funktioniert.
Ich nehme an, der Grund dafür ist, dass ChangeTypes ist ein array von enumeration-Werte.

Die Frage ist: wie kann ich Deserialisieren/serialisieren ChangeTypes Feld, oder im Allgemeinen ein array von enumeration-Werte?

Ich habe versucht, durch die Definition meiner eigenen Feld Konverter, genannt ChangeTypeConverter, und ändern StrinEnumConverter zu ChangeTypeConverter für ChangeTypes Feld, aber in der ReadJson Funktion den Wert der Leser ist gleich null.

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);
    }
}
InformationsquelleAutor panizza | 2014-04-29
Schreibe einen Kommentar