Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.Net-反序列化为c中的枚举#_C#_Json_Json.net - Fatal编程技术网

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

C# Json.Net-反序列化为c中的枚举#,c#,json,json.net,C#,Json,Json.net,我正在使用Json.Net进行反序列化 我有一个c#类,它的属性是这种类型的枚举: public enum MyEnum { House, Cat, Dog } 我所拥有的Json: "MyEnum ": "House", "MyEnum ": "Cat", "MyEnum ": "Doc<woof>" “MyEnum”:“House”, “MyEnum”:“猫”, “MyEnum”:“Doc” House和Cat反序列化,但是Dog

我正在使用Json.Net进行反序列化

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

public enum MyEnum {
  House,   
  Cat,
  Dog
 }
我所拥有的Json:

    "MyEnum ": "House",
    "MyEnum ": "Cat",
    "MyEnum ": "Doc<woof>"
“MyEnum”:“House”,
“MyEnum”:“猫”,
“MyEnum”:“Doc”
House
Cat
反序列化,但是
Dog
当然不会。如何让Json.Net忽略或处理
woof

您需要定义一个。这可能看起来像这样:

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());
  }
}
您需要定义一个。这可能看起来像这样:

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是否可用于自定义枚举序列化,我自己从未这样做过…)现在发生了什么(例如引发异常)?您希望发生什么?为什么首先保留
部分?如果您的值本身不是有效的枚举,则此处使用的枚举类型是错误的。这不是有效的json,您似乎有重复的键。看起来像的重复项。同意吗?可能是此类型/枚举的自定义JsonConverter?(不确定JsonConverter是否可用于自定义枚举序列化,我自己从未这样做过…)现在发生了什么(例如引发异常)?您希望发生什么?为什么首先保留
部分?如果您的值本身不是有效的枚举,则此处使用的枚举类型是错误的。这不是有效的json,您似乎有重复的键。看起来像的重复项。同意吗?