【问题标题】:Is it possible to automatically map all properties except a few complicated ones with AutoMapper?是否可以使用 AutoMapper 自动映射除少数复杂属性之外的所有属性?
【发布时间】:2013-10-24 01:23:36
【问题描述】:

我有一些具有大量属性的对象。当我开始使用 AutoMapper 时,我试图只映射一些嵌套对象以了解它是如何工作的。我一直认为它会映射源和目的地具有相同名称的属性。但是,似乎一旦我有了一些 ForMember() 规则,它就只会映射我有规则的属性。

有没有办法只指定一些规则,源对象和目标对象不同?还是我必须明确并映射每个属性?

Mapper.CreateMap<MessageWireFormat, Message>()
    .ForMember(dest => dest.PlainBody, opt => opt.MapFrom(src => src.Body.Plain))
    .ForMember(dest => dest.ParsedBody, opt => opt.MapFrom(src => src.Body.Parsed))
    .ForMember(dest => dest.RichBody, opt => opt.MapFrom(src => src.Body.Rich))
    .ForMember(dest => dest.Excerpt, opt => opt.MapFrom(src => src.ContentExcerpt))
    .ForMember(dest => dest.AttachmentCount, opt => opt.MapFrom(src => src.Attachments.Length))
    .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
    .ForMember(dest => dest.Url, opt => opt.MapFrom(src => src.Url))
    .ForMember(dest => dest.WebUrl, opt => opt.MapFrom(src => src.WebUrl))
    .ForMember(dest => dest.NetworkId, opt => opt.MapFrom(src => src.NetworkId))
    .ForMember(dest => dest.GroupId, opt => opt.MapFrom(src => src.GroupId))
    .ForMember(dest => dest.SystemMessage, opt => opt.MapFrom(src => src.SystemMessage))
    .ForMember(dest => dest.Privacy, opt => opt.MapFrom(src => src.Privacy))
    .ForMember(dest => dest.DirectMessage, opt => opt.MapFrom(src => src.DirectMessage))
    .ForMember(dest => dest.SenderType, opt => opt.MapFrom(src => src.SenderType))
    .ForMember(dest => dest.SenderId, opt => opt.MapFrom(src => src.SenderId))
    .ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => src.CreatedAt))
    .ForMember(dest => dest.ClientType, opt => opt.MapFrom(src => src.ClientType))
    .ForMember(dest => dest.ClientUrl, opt => opt.MapFrom(src => src.ClientUrl))
    .ForMember(dest => dest.RepliedToId, opt => opt.MapFrom(src => src.RepliedToId))
    .ForMember(dest => dest.Language, opt => opt.MapFrom(src => src.Language));

【问题讨论】:

  • 只要您的属性名称遵循 AutoMapper 强加的命名约定,它就应该自动工作而无需设置显式映射。
  • 谢谢。我会仔细检查。

标签: c# mapping automapper automapper-3


【解决方案1】:

圣钼。几乎所有这些映射都是不必要的。 MapFrom 仅适用于名称​​不 匹配时,而不是匹配时。即使它们不匹配,我也需要一个非常好的理由不使用“BodyPlain”,它会在没有配置的情况下映射,而不是“PlainBody”,它与“Body.Plain”不匹配。

【讨论】:

  • 原来MessageWireFormat改成了internal。当我再次公开它时,我能够摆脱映射。我看到这仍然存在一个错误,这是一个有争议的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多