在 JSON 反序列化期间忽略未知的枚举值
问题:
使用 Json 进行 JSON 反序列化。当在 JSON 数据中遇到未知的枚举值时,net 可能会引发异常。当基于当前文档创建枚举,但第三方 API 后来添加新的枚举值时,就会出现这种情况。
解决方案:自定义 JsonConverter
解决此问题,可以使用自定义的 JsonConverter。它的工作原理如下:
代码实现:
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中文网其他相关文章!