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

如何解决AutoMapper映射POCO到Record时嵌套属性映射失败问题

问题原因

这是AutoMapper的默认映射规则导致的使用问题,不是BUG。
AutoMapper 10.1.1 版本映射到 positional record(位置参数定义的record)时,构造函数参数映射的优先级高于属性映射配置。你在Profile中定义的ForMember规则仅针对属性赋值生效,不会作用到构造参数的匹配逻辑。
你定义的ExistingBook是只有一个CreatedBy参数的位置record,AutoMapper映射时会优先匹配源类型Book中同名的CreatedBy属性(Person类型),直接将该对象传入构造函数,相当于隐式调用了ToString(),所以你得到的是Tests.UnitTests.Person这个类型名称字符串,而不是你想要的Name属性值。

解决方案

  • 方案1:为构造参数单独配置映射规则
    将你的AutoMapper配置修改为指定构造参数的映射逻辑:
public AutoMapperProfile() 
{
    CreateMap<Book, ExistingBook>()
        .ForCtorParam("CreatedBy", opt => opt.MapFrom(z => z.CreatedBy.Name));
}
  • 方案2:修改record定义为显式属性模式
    如果不需要强制用位置参数构造record,可以把record改成带初始化属性的写法,此时原有的ForMember属性映射规则会正常生效:
public record ExistingBook 
{
    public string CreatedBy { get; init; }
}

内容的提问来源于stack exchange,提问作者mu88

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:45:02