在 JSON 反序列化期间忽略未知的枚举值
将 JSON 数据反序列化为枚举时,可能会遇到 JSON 属性包含以下内容的情况与任何现有枚举值都不匹配的值。默认情况下,这可能会导致错误。
TolerantEnumConverter 来救援
要优雅地处理此问题,您可以使用名为 TolerantEnumConverter 的自定义 JsonConverter。此转换器通过定义一组规则提供了一种灵活的方法来处理未知枚举值:
实现细节
TolerantEnumConverter 处理字符串和整数值在 JSON 中。它根据不区分大小写的字符串比较或枚举值集中是否存在来检查匹配项。
示例用法
要使用 TolerantEnumConverter,请使用以下命令注释您的枚举属性[JsonConverter(typeof(TolerantEnumConverter))] 属性。下面是一个示例:
[JsonConverter(typeof(TolerantEnumConverter))] enum Status { Ready = 1, Set = 2, Go = 3, }
演示应用程序
以下演示应用程序演示了如何使用 TolerantEnumConverter 处理不可为空和可为空的情况枚举:
// Sample JSON data string json = @" { ""NonNullableStatusWithValidStringValue"" : ""Set"", ""NonNullableStatusWithInvalidStringValue"" : ""Blah"", ""NullableStatusWithValidStringValue"" : ""Go"", ""NullableStatusWithInvalidStringValue"" : ""Blah"", }"; // Deserialize JSON data into Foo object Foo foo = JsonConvert.DeserializeObject<Foo>(json, new JsonSerializerSettings { Converters = { new TolerantEnumConverter() } }); // Output the deserialized values foreach (PropertyInfo prop in typeof(Foo).GetProperties()) { Console.WriteLine(prop.Name + ": " + (prop.GetValue(foo) ?? "(null)")); }
输出:
NonNullableStatusWithValidStringValue: Set NonNullableStatusWithInvalidStringValue: Ready NullableStatusWithValidStringValue: Go NullableStatusWithInvalidStringValue: (null)
结论
TolerantEnumConverter 提供了一种将 JSON 数据反序列化为枚举的便捷方法,而不会遇到错误对于未知值。它提供可定制的行为来满足您的特定需求。
以上是如何在 JSON 反序列化过程中优雅地处理未知的枚举值?的详细内容。更多信息请关注PHP中文网其他相关文章!