简体   繁体   English

Json.Net-在C#中反序列化为枚举

[英]Json.Net - Deserialized to an Enum in c#

I am using Json.Net to deserialize 我正在使用Json.Net反序列化

I have ac# class that has a property of this type of enum: 我有一个具有此类枚举属性的ac#类:

public enum MyEnum {
  House,   
  Cat,
  Dog
 }

The Json I have: 我的Json:

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

House and Cat deserializes, but Dog<woof> of course doesn't. HouseCat反序列化,但是Dog<woof>当然不会。 How can I get Json.Net to ignore or handle the woof ? 如何让Json.Net忽略或处理woof

You will need to define a custom JsonConverter . 您将需要定义一个自定义JsonConverter This might look something like this: 这可能看起来像这样:

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());
  }
}

Then decorate your enum with a [JsonConverter] attribute: 然后使用[JsonConverter]属性装饰枚举:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM