如何使用AutoMapper映射到包含私有字段的嵌套对象
AutoMapper 映射配置解决方案
你需要实现CreateMap<MoneyRangeSource, MoneyRangeDest>()映射的核心问题是:源类的Start、End属性为string类型,目标类对应属性为Money类型,而Money仅提供了接收string参数的构造函数。以下是两种可选实现方案:
方案1:配置全局类型转换器(多场景复用推荐)
如果你项目中多处存在string转Money的映射需求,可先配置全局类型转换规则,后续所有同名属性匹配的映射都会自动应用该规则:
// AutoMapper 配置类中添加 // 1. 配置string到Money的全局转换逻辑 CreateMap<string, Money>().ConvertUsing(str => new Money(str)); // 2. 直接配置两个业务类的映射即可,无需额外处理同名属性 CreateMap<MoneyRangeSource, MoneyRangeDest>();
方案2:单独配置当前映射的成员转换(仅单场景使用推荐)
如果只有当前这一处映射需要做string到Money的转换,可以直接在当前映射规则里单独配置成员映射逻辑:
// AutoMapper 配置类中添加 CreateMap<MoneyRangeSource, MoneyRangeDest>() .ForMember(dest => dest.Start, opt => opt.MapFrom(src => new Money(src.Start))) .ForMember(dest => dest.End, opt => opt.MapFrom(src => new Money(src.End)));
两种方案均可正常完成映射,可根据你项目的实际使用场景选择即可。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

