首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置Automapper在属性为null时忽略Object-Properties,但在不为null时进行映射

如何配置Automapper在属性为null时忽略Object-Properties,但在不为null时进行映射
EN

Stack Overflow用户
提问于 2020-08-05 21:37:14
回答 1查看 58关注 0票数 0

我使用的是Automapper。在这种情况下,我将DTO对象映射到另一个对象。

UserProperties类。

代码语言:javascript
复制
public string DisplayName { get; set; }

public int Id { get; set; }

public int NotesCount {get;set;}

PersonsDTO类

代码语言:javascript
复制
public string UserName { get; set; }

public int UserId { get; set; }

public int NotesCount { get ; set; }

public int BooksCount { get; set; }

Person类

代码语言:javascript
复制
public UserProperties? UserDetails { get; set; }

public int NotesCount { get ; set; }

public int BooksCount { get; set; }

在映射配置文件中,

代码语言:javascript
复制
CreateMap<PersonsDTO, Persons>()
             .ForPath(o => o.UserDetails.DisplayName, b => b.MapFrom(z => z.UserName))
             .ForPath(o => o.UserDetails.Id, b => b.MapFrom(z => z.UserId))
             .ReverseMap();

在我的例子中,Persons类中的UserDetails是一个可以为空的类型。如果PeronsDTO类中的UserId0 means,我不需要映射UserDetails。对于UserDetails属性,它应该作为null返回。

我怎样才能做到这一点?

Automapper版本: 9.0.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 07:51:52

您可以指定一个自定义解析器来显式地执行自定义映射。

代码语言:javascript
复制
    CreateMap<PersonDTO, Person>()
      .ForMember(dest => dest.UserDetails, opt => opt.MapFrom<CustomResolver>());

    public class CustomResolver : IValueResolver<PersonDTO, Person, UserProperties>
    {
        public UserProperties Resolve(PersonDTO source, Person destination, UserProperties member, ResolutionContext context)
        {
            if (source.UserId == 0)
                return null;
            return new UserProperties
            {
                DisplayName = source.UserName,
                Id = source.UserId
            };
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63266425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档