首页 > 后端开发 > C++ > 反序列化 JSON 时如何处理未知的枚举值?

反序列化 JSON 时如何处理未知的枚举值?

Barbara Streisand
发布: 2024-12-31 10:16:14
原创
168 人浏览过

How Can I Handle Unknown Enum Values When Deserializing JSON?

使用未知枚举值反序列化 JSON

解析 JSON 数据时,必须处理提供的枚举值与代码库中定义的枚举值不匹配的情况。当第三方 API 随着时间的推移引入新的枚举值时,通常会发生这种情况。

解决方案:自定义 JsonConverter

要解决此问题,您可以创建自定义 JsonConverter:

class TolerantEnumConverter : JsonConverter
{
    // ... Implementation ...
}
登录后复制

该转换器通过以下方式简化了反序列化过程逻辑:

  • 如果 JSON 值与现有枚举值(字符串或整数)匹配,则分配该值。
  • 对于可空枚举,如果该值返回 null缺失。
  • 如果枚举包含“未知”值,则它会设置为
  • 否则,它使用第一个枚举值。

示例用法:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Status { Ready, Set, Go }

string json = @"{ ""status"": ""SomethingElse"" }";

var status = JsonConvert.DeserializeObject<Status>(json); // Returns "Ready"
登录后复制

可空枚举和“未知”值:

处理具有未知值的可为空枚举,您可以在枚举定义中添加“未知”值。例如:

[JsonConverter(typeof(TolerantEnumConverter))]
enum Color { Red, Yellow, Green, Unknown = 99 }

string colorJson = @"{ ""color"": ""Purple"" }";

var color = JsonConvert.DeserializeObject<Color?>(colorJson); // Returns null
登录后复制

结论:

通过利用此处提供的自定义 JsonConverter,即使枚举值随时间变化,您也可以确保 JSON 反序列化顺利进行,防止错误并保持数据完整性。

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

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