相关疑难解决方法(0)

如何装饰JSON.NET StringEnumConverter

我正在使用一个api,它返回这样的字符串值. some-enum-value

我尝试将这些值放在枚举中,因为默认的StringEnumConverter不能完成这项工作,我尝试用一​​些额外的逻辑来装饰这个转换器.如何确保正确反序列化值?

以下代码是我尝试完成这项工作.然而,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 + …
Run Code Online (Sandbox Code Playgroud)

c# enums json json.net

37
推荐指数
3
解决办法
3万
查看次数

标签 统计

c# ×1

enums ×1

json ×1

json.net ×1