例如我拥有以下代码。
1
2
3
4
5
6
|
public class NewObject
{
public int? TestValue { get; set; }
public int? Age { get; set; }
}
|
当我为 TestValue
属性传入一个非法数据的时候,在使用 JSON.NET
进行反序列化时会抛出异常。例如我通过以下代码对一个字符串进行反序列化,如果不出意外的话会提示无效参数值的异常。
1
|
var newValue = JsonConvert.DeserializeObject<NewObject>(@"{""TestValue"":""FFFF"",""Age"":15}",settings);
|
通过 Stackoverflow 查询得知,可以通过在反序列化时指定 JsonSerializerSettings
对象进行忽略。
1
2
3
4
5
6
7
8
9
|
var settings = new JsonSerializerSettings
{
Error = (obj, args2) =>
{
args2.ErrorContext.Handled = true;
}
};
var newValue = JsonConvert.DeserializeObject<NewObject>(@"{""TestValue"":""FFFF"",""Age"":15}",settings);
|
这样,在进行反序列化的时候就可以忽略 TestValue
的无效值,为其属性设置为 null
,并且成功解析 Age
的值。
如果你是 ASP.NET Core 的程序,可以通过 IServiceCollection
的 Configure<T>()
方法来配置 Error
的处理器。
1
2
3
4
5
|
services.Configure<MvcJsonOptions>(jsonOptions =>
{
// 忽略转换过程中的异常信息
jsonOptions.SerializerSettings.Error += (sender, args) => { args.ErrorContext.Handled = true; };
});
|