c# - Json.Net - 在 c# 中反序列化为枚举
问题描述
我正在使用 Json.Net 反序列化
我有一个具有这种类型枚举属性的 ac# 类:
public enum MyEnum {
House,
Cat,
Dog
}
我拥有的Json:
"MyEnum ": "House",
"MyEnum ": "Cat",
"MyEnum ": "Doc<woof>"
House
并Cat
反序列化,但Dog<woof>
当然不会。如何让 Json.Net 忽略或处理woof
?
解决方案
您将需要定义一个自定义 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,
}
推荐阅读
- yosys - 支持 Verilog 和 SystemVerilog
- c++ - 没有从“double”类型的返回值到函数返回类型“vector”的可行转换
' - session - 在 TLD 设置 Cookie(跨域跟踪)
- excel - 如何通过VBA解决散点图中的标记?
- html - 如何清除 AWS Cloudfront 上的 html 缓存
- python - 如何删除多个 .csv 文件中具有空列值的行
- ruby-on-rails - 如何启动 rails server 命令作为重启或粉碎后重新启动的守护进程?
- java - Spring Boot 2.2 ClassNotFoundException com.sun.xml.ws.spi.ProviderImpl 使用 fat jar 从 Java 8 升级到 11
- c# - ToArray() 在将 var 转换为 .ToArray() 时在 C# 中引发异常
- django - javascript代码中的Django动态url解析