从集合或列表中自动处理和继承

时间:2016-10-11 06:30:58

标签: c# list inheritance automapper

我试图使用AutoMapper(v5.1.1)来映射从List或Collection继承的对象。地图调用不会给我一个错误,但输出是一个空列表(虽然类型正确)。

我可以获得List<DestinationObject>Collection<DestinationObject>,但在拥有来自List<T>Collection<T>的自定义类时似乎无效。

我尝试扩展第一个地图定义以包含基类(List<T>),但这会给我一个StackOverflowException。

cfg.CreateMap(typeof(SourceCollection), typeof(DestinationCollection)).Include(typeof(List<SourceObject>), typeof(List<DestinationObject>)); 

我在这里缺少什么?

public class SourceCollection : List<SourceObject> {

}

public class DestinationCollection : List<DestinationObject> {

}

public class SourceObject {

    public string Message { get; set; }
}

public class DestinationObject {

  public string Message { get; set; }
}


static void Main(string[] args)
{

    AutoMapper.Mapper.Initialize(cfg =>
    {
        cfg.CreateMap(typeof(SourceCollection), typeof(DestinationCollection)); 
        cfg.CreateMap<List<SourceObject>, List<DestinationObject>>().Include<SourceCollection, DestinationCollection>();
        cfg.CreateMap(typeof(SourceObject), typeof(DestinationObject));
    });

    AutoMapper.Mapper.AssertConfigurationIsValid();

    SourceCollection srcCol = new SourceCollection() { new SourceObject() { Message = "1" }, new SourceObject() { Message = "2" } };
    DestinationCollection dstCol = AutoMapper.Mapper.Map<SourceCollection, DestinationCollection>(srcCol);
}

1 个答案:

答案 0 :(得分:1)

你只需要将sourceobject映射到destinationobject,AutoMapper将完成剩余的魔法,更多相关信息可以在link上找到

cfg.CreateMap(typeof(SourceObject), typeof(DestinationObject));