我正在使用Json.NET对一些JSON API进行序列化/反序列化。
API响应具有一些整数值,这些整数值映射到应用程序中定义的Enum。
枚举是这样的:
public enum MyEnum
{
Type1,
Type2,
Type3
}
并且json API响应具有以下内容:
{
"Name": "abc",
"MyEnumValue":"Type1"
}
有时,API会为我的枚举中未定义的MyEnumValue字段返回一个值,如下所示:
{
"Name": "abc",
"MyEnumValue":"Type4"
}
抛出一个异常:
将值“ Type4”转换为“ MyEnum”类型时出错
有没有一种方法可以通过分配默认值或避免应用程序崩溃的方法来处理此错误?
假设我们有以下json字符串:
[
{
"Name": "abc",
"MyEnumValue": "Type1"
},
{
"Name": "abcd",
"MyEnumValue": "Type2"
},
{
"Name": "abcde",
"MyEnumValue": "Type3"
} ,
{
"Name": "abcdef",
"MyEnumValue": "Type4"
}
]
以及以下类和枚举:
public class MyClass
{
public string Name { get; set; }
public MyEnum MyEnumValue { get; set; }
}
public enum MyEnum
{
Type1,
Type2,
Type3
}
可以注意到,json字符串数组包含无法正确映射到的项目(最后一个)MyEnum
。为了避免反序列化错误,您可以使用以下代码片段:
static void Main(string[] args)
{
var serializationSettings = new JsonSerializerSettings
{
Error = HandleDeserializationError
};
var lst = JsonConvert.DeserializeObject<List<MyClass>>(jsonStr, serializationSettings);
}
public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
errorArgs.ErrorContext.Handled = true;
var currentObj = errorArgs.CurrentObject as MyClass;
if (currentObj == null) return;
currentObj.MyEnumValue = MyEnum.Type2;
}
其中jsonStr
变量是上面发布的json字符串。在上面的代码示例中,如果MyEnumValue
无法正确解释,则将其设置为默认值Type2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句