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

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

Barbara Streisand
Barbara Streisand原创
2024-12-31 10:16:14174浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn