Я потребляю api, который возвращает строковые значения, подобные этому. some-enum-value
Я пытаюсь поместить эти значения в перечисление, поскольку по умолчанию StringEnumConverter не выполняет работу, я пытаюсь украсить этот конвертер некоторой дополнительной логикой. Как я могу убедиться, что значения правильно десериализованы?
Следующий код - это моя попытка выполнить эту работу. Однако строка reader = new JsonTextReader(new StringReader(cleaned));
разрушает все это, поскольку base.ReadJson can not распознает строку как JSON.
Есть ли лучший способ сделать это, не выполняя всю логику excisting в StringEnumConverter? Как исправить мой подход?
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));
}
}