Sto consumando un'API che restituisce valori di stringa come questo. some-enum-value
Come decorare JSON.NET StringEnumConverter
Io cerco di mettere questi valori in un enum, dal momento che il default StringEnumConverter non fare il lavoro cerco di decorare questo convertitore con una certa logica aggiuntiva. Come posso assicurarmi che i valori siano correttamente deserializzati?
Il seguente codice è il mio tentativo di portare a termine questo lavoro. Tuttavia la riga reader = new JsonTextReader(new StringReader(cleaned));
interrompe il tutto dal momento che la base non riesce a riconoscere la stringa come JSON.
Esiste un modo migliore per farlo senza dover implementare tutta la logica excisting in StringEnumConverter? Come risolvere il mio approccio?
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));
}
}
Ciao, ti preghiamo Potete fornire progetto di esempio perché non funziona per me. Grazie. –
basta fornire JsonSerializerSettings al tuo JsonConverter –
Piccolo commento. Se non si utilizza StringEnumConverter, ma il valore predefinito da json.net, l'enumMember non funzionerà. – dampee