首页 > 后端开发 > C++ > 如何使用 Json.net 在 JSON 反序列化过程中处理未知的枚举值?

如何使用 Json.net 在 JSON 反序列化过程中处理未知的枚举值?

Linda Hamilton
发布: 2025-01-05 13:27:41
原创
968 人浏览过

How to Handle Unknown Enum Values During JSON Deserialization with Json.net?

在 JSON 反序列化期间忽略未知的枚举值

问题:

使用 Json 进行 JSON 反序列化。当在 JSON 数据中遇到未知的枚举值时,net 可能会引发异常。当基于当前文档创建枚举,但第三方 API 后来添加新的枚举值时,就会出现这种情况。

解决方案:自定义 JsonConverter

解决此问题,可以使用自定义的 JsonConverter。它的工作原理如下:

  • 如果 JSON 值与枚举(字符串或整数)匹配,则使用它。
  • 如果枚举可为空,则该值设置为 null。
  • 如果枚举具有“未知”值,则使用它。
  • 否则,使用枚举的第一个值。

代码实现:

class TolerantEnumConverter : JsonConverter
{
    ... (Implementation from the provided answer)
}
登录后复制

用法:

应用枚举类型的 [JsonConverter(typeof(TolerantEnumConverter))] 属性在反序列化过程中使用自定义转换器:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status
{
    ... (Enum values)
}
登录后复制

示例演示:

以下代码片段演示了如何使用具有不同枚举值和 JSON 的 TolerantEnumConverter输入:

string json = @"
{
    ... (JSON data with valid and invalid enum values)
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json);

foreach (PropertyInfo prop in typeof(Foo).GetProperties())
{
    object val = prop.GetValue(foo, null);
    Console.WriteLine(prop.Name + ": " + 
                     (val == null ? "(null)" : val.ToString()));
}
登录后复制

输出:

控制台输出显示 TolerantEnumConverter 如何处理未知枚举值,包括将值设置为“(null)”、“Unknown” ,或使用枚举的第一个值。

以上是如何使用 Json.net 在 JSON 反序列化过程中处理未知的枚举值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板