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);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
StringEnumConverter
erwartet nur eine einzelne Aufzählung Wert. DaChangeTypes
ist ein array, Sie müssen kommentieren Sie die Eigenschaft ein wenig anders machen, damit es funktioniert.Versuchen Sie dies:
Gibt es keine Notwendigkeit zum schreiben eines benutzerdefinierten JsonConverter zum serialisieren/Deserialisieren array of Enum.
Statt zu schmücken, einzelne Eigenschaft im parent-Modell, nur schmücken die Enum mit einem StringEnumConverter JsonConverter Attribut.
ZB:-
Folgenden Umwelt-Modell hat Unterschlupf enum-Eigenschaft und array of enum-Schutz[]
Output json:-
System.Windows.Media.Colors