使用映射库将嵌套对象映射到C#中的自定义对象

我有以下对象结构:

/// <summary>
/// nested message instance provided by a business service
/// </summary>
public class Message
{
    public string Subject { get; set; }
    public DateTime CreationDate { get; set; }
    public List<Message> Messages { get; set; }
}

我想将该对象映射到以下对象结构:

/// <summary>
/// UI Object used to display a nested message structure
/// </summary>
public class MessageViewModel : ViewModelBase
{
    public bool IsSelected { get; set; }

    public string Subject { get; set; }

    public DateTime CreationDate { get; set; }
    public List<MessageViewModel> Messages { get; set; }
}

有没有可以轻松完成工作的映射器?

解决方法:

您可以使用AutoMapper.要首先映射某些类型,您需要创建一些映射:

Mapper.Initialize(cfg => cfg
    .CreateMap<Message, MessageViewModel>());

这将创建从Message到MessageViewModel的映射.默认情况下,AutoMapper会映射具有相同名称的所有属性.当指定了类型的映射时,也会映射嵌套的复杂属性.因此,在您的示例中,上面的映射就足够了,因为嵌套属性类型与其父类型相同,并且源类型的每个属性在目标类型中都具有相同的属性.集合隐式映射到其他集合.

要映射具体对象,可以使用Mapper.Map方法:

var messageViewModel = Mapper.Map<MessageViewModel>(message);

这只是静态映射器的示例,但也可以将mapper创建为对象.有关更高级的主题,您可以阅读文档:http://docs.automapper.org/en/stable/

上一篇:c# – Automapper Intellisense在VS2015中不起作用


下一篇:c# – Automapper Convention