解析 JSON 数据时,必须处理提供的枚举值与代码库中定义的枚举值不匹配的情况。当第三方 API 随着时间的推移引入新的枚举值时,通常会发生这种情况。
解决方案:自定义 JsonConverter
要解决此问题,您可以创建自定义 JsonConverter:
class TolerantEnumConverter : JsonConverter { // ... Implementation ... }
该转换器通过以下方式简化了反序列化过程逻辑:
示例用法:
[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中文网其他相关文章!