Ich bin eine API essen, die String-Werte wie folgt zurückgibt. some-enum-value
Wie dekoriere ich JSON.NET StringEnumConverter
Ich versuche, diese Werte in eine Enumeration zu setzen, da der Standard-StringEnumConverter nicht den Job macht, den ich versuche, diesen Konverter mit etwas zusätzlicher Logik zu dekorieren. Wie kann ich sicherstellen, dass die Werte korrekt deserialisiert sind?
Der folgende Code ist mein Versuch, diese Arbeit zu erledigen. Die Zeile reader = new JsonTextReader(new StringReader(cleaned));
bricht jedoch die ganze Sache seit der Base.ReadJson kann die Zeichenfolge als JSON nicht erkennen.
Gibt es einen besseren Weg, dies zu tun, ohne die gesamte existierende Logik in StringEnumConverter implementieren zu müssen? Wie kann ich meinen Ansatz korrigieren?
public class BkStringEnumConverter : StringEnumConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
var enumString = reader.Value.ToString();
if (enumString.Contains("-"))
{
var cleaned = enumString.Split('-').Select(FirstToUpper).Aggregate((a, b) => a + b);
reader = new JsonTextReader(new StringReader(cleaned));
}
}
return base.ReadJson(reader, objectType, existingValue, serializer);
}
private static string FirstToUpper(string input)
{
var firstLetter = input.ToCharArray().First().ToString().ToUpper();
return string.IsNullOrEmpty(input)
? input
: firstLetter + string.Join("", input.ToCharArray().Skip(1));
}
}
Hallo, bitte können Sie zur Verfügung stellen Beispielprojekt, weil es nicht für mich arbeiten. Vielen Dank. –
nur die JsonSerializerSettings zu Ihrem JsonConverter –
Kleiner Kommentar. Wenn Sie nicht den StringEnumConverter, sondern den Standardwert von json.net verwenden, funktioniert der enumMember nicht. – dampee