You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AutoMapper中处理缺失属性?避免对象被整体置空

解决AutoMapper映射XML缺失属性导致对象为空的问题

方案1:利用AutoMapper自动映射(推荐)

无需手动在MapFrom里实例化Person和PersonName,让AutoMapper自动处理字段映射即可。当XML中缺少某个属性时,对应字段会被设为null,而非整个PersonName对象为空。

先创建XMLData到PersonName的映射,再创建XMLData到Person的映射:

// 映射PersonName,对可能缺失的属性用null条件运算符安全访问
CreateMap<XMLData, PersonName>()
    .ForMember(dest => dest.PersonFirstName, opt => opt.MapFrom(src => src.PersonFirstName.Value))
    .ForMember(dest => dest.PersonMiddleName, opt => opt.MapFrom(src => src.PersonMiddleName?.Value))
    .ForMember(dest => dest.PersonLastName, opt => opt.MapFrom(src => src.PersonLastName.Value))
    .ForMember(dest => dest.PersonSuffix, opt => opt.MapFrom(src => src.PersonSuffix?.Value));

// 映射Person,自动复用上面的PersonName映射规则
CreateMap<XMLData, Person>()
    .ForMember(dest => dest.PersonName, opt => opt.MapFrom(src => src));

方案2:改进手动实例化写法

如果坚持手动创建对象,需要给每个可能缺失的属性加上null条件判断,避免单个字段缺失导致整个PersonName无法创建:

CreateMap<XMLData, Person>()
    .ForMember(dest => dest.PersonName, opt => opt.MapFrom(src => 
        new PersonName
        {
            PersonFirstName = src.PersonFirstName.Value,
            PersonMiddleName = src.PersonMiddleName?.Value,
            PersonLastName = src.PersonLastName.Value,
            PersonSuffix = src.PersonSuffix?.Value
        }));

问题根源说明

你直接访问src.PersonMiddleName.Value时,若XML中无该属性,src.PersonMiddleName为null,此时访问.Value会触发空引用异常,AutoMapper捕获异常后会将整个PersonName设为null。使用?.运算符可安全访问可能为null的属性,避免异常发生。

内容的提问来源于stack exchange,提问作者AJ M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:27