代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

Json.Net-反序列化为c中的枚举#

  •  0
  • Ian Vink  · 技术社区  · 6 年前

    我有一个c#类,它有一个枚举类型的属性:

    public enum MyEnum {
      House,   
      Cat,
      Dog
     }
    

    我拥有的Json:

        "MyEnum ": "House",
        "MyEnum ": "Cat",
        "MyEnum ": "Doc<woof>"
    

    House Cat 反序列化,但是 Dog<woof> 当然没有。如何让Json.Net忽略或处理 woof ?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Eric Damtoft    6 年前

    你需要定义一个 custom JsonConverter . 这可能看起来像这样:

    class MyEnumConverter : JsonConverter<MyEnum>
    {
      public override MyEnum ReadJson(JsonReader reader, Type objectType, MyEnum existingValue, bool hasExistingValue, JsonSerializer serializer)
      {
        var token = reader.Value as string ?? reader.Value.ToString();
        var stripped = Regex.Replace(token, @"<[^>]+>", string.Empty);
        if (Enum.TryParse<MyEnum>(stripped, out var result))
        {
          return result;
        }
        return default(MyEnum);
      }
    
      public override void WriteJson(JsonWriter writer, MyEnum value, JsonSerializer serializer)
      {
        writer.WriteValue(value.ToString());
      }
    }
    

    [JsonConverter] 属性:

    [JsonConverter(typeof(MyEnumConverter))]
    enum MyEnum
    {
      House,
      Dog,
      Cat,
    }