C# Json.Net-反序列化为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
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,您似乎有重复的键。看起来像的重复项。同意吗?