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; };
    });
    
  • 相关阅读:
    使用requests爬虫简单获取知乎问题信息
    slam介绍
    move_base 控制机器人(2)
    move_base 控制机器人(1)
    Linux 常用命令-touch
    Linux 常用命令-rmdir
    Linux 常用命令-rm
    Linux 常用命令-mkdir
    Linux 目录结构
    Linux 常用命令-pwd
  • 原文地址:https://www.cnblogs.com/myzony/p/10347652.html
Copyright © 2011-2022 走看看