我使用的API返回的字符串值如下:
some-enum-value
我try 将这些值放入enum
,因为默认的StringEnumConverter
不会执行我想要的操作,即使用一些额外的逻辑来修饰此Converter.
How can I be sure that the values are deserialized correctly ?
以下代码是我完成这项工作的试用版.
reader = new JsonTextReader(new StringReader(cleaned));
中断整个过程,因为base.ReadJson
不能将字符串识别为JSON.
有没有更好的方法来做到这一点,而不需要在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));
}
}