zoukankan      html  css  js  c++  java
  • JSON 序列化的时候忽略无效的属性值

    例如我拥有以下代码。

    public class NewObject
    {
        public int? TestValue { get; set; }
    
        public int? Age { get; set; }
    }
    

    当我为 TestValue 属性传入一个非法数据的时候,在使用 JSON.NET 进行反序列化时会抛出异常。例如我通过以下代码对一个字符串进行反序列化,如果不出意外的话会提示无效参数值的异常。

    var newValue = JsonConvert.DeserializeObject<NewObject>(@"{""TestValue"":""FFFF"",""Age"":15}",settings);
    

    通过 Stackoverflow 查询得知,可以通过在反序列化时指定 JsonSerializerSettings 对象进行忽略。

    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 的程序,可以通过 IServiceCollectionConfigure<T>() 方法来配置 Error 的处理器。

    services.Configure<MvcJsonOptions>(jsonOptions =>
    {
    	// 忽略转换过程中的异常信息
    	jsonOptions.SerializerSettings.Error += (sender, args) => { args.ErrorContext.Handled = true; };
    });
    
  • 相关阅读:
    最短路计数
    轻拍牛头(类埃式筛)
    子序列(尺取模板题)
    状压dp(洛谷:互不侵犯)
    刷题-力扣-73. 矩阵置零
    刷题-力扣-150. 逆波兰表达式求值
    刷题-力扣-300. 最长递增子序列
    刷题-力扣-1576. 替换所有的问号
    刷题-力扣-54. 螺旋矩阵
    刷题-力扣-705. 设计哈希集合
  • 原文地址:https://www.cnblogs.com/myzony/p/10347652.html
Copyright © 2011-2022 走看看