我遇到了一种奇怪的情况,我有objects和Lists of objects作为实体和合同的一部分来与第三方服务接口。我将试着看看是否可以用实体和契约中更具体的东西来替换实际的对象类,但我很好奇是否有一种方法可以让AutoMapper按原样处理这个问题。
下面是一些虚拟类:
public class From
{
public object Item { get; set; }
}
public class FromObject
{
public string Value { get; set; }
}
public class To
{
public object Item { get; set; }
}
public class ToObject
{
public string Value { get; set; }
}以及快速复制:
Mapper.CreateMap<From, To>();
Mapper.CreateMap<FromObject, ToObject>();
From from = new From { Item = new FromObject { Value = "Test" } };
To to = Mapper.Map<To>(from);
string type = to.Item.GetType().Name; // FromObject基本上,问题是:是否有办法让AutoMapper理解from.Item是一个FromObject并将映射应用到ToObject?我在想,可能没有办法使它自动化,因为没有什么可以表明to.Item必须是ToObject,但是在CreateMap或Map调用期间是否有方法指定应该考虑到这一点呢?
发布于 2015-09-29 22:52:13
我不认为有一种“自动”的方法,因为AutoMapper无法确定From.Item是FromObject,To.Item是ToObject。
但是,在创建映射时,可以指定
Mapper.CreateMap<FromObject, ToObject>();
Mapper.CreateMap<From, To>()
.ForMember(dest => dest.Item, opt => opt.MapFrom(src => Mapper.Map<ToObject>(src.Item)));
From from = new From { Item = new FromObject { Value = "Test" } };
To to = Mapper.Map<To>(from);
string type = to.Item.GetType().Name; // ToObject发布于 2015-09-29 23:06:18
如果您愿意使用额外的接口,这可以使用Include完成。不过,您不能以这种方式将object映射到object。
public class From
{
public IItem Item { get; set; }
}
public class FromObject : IItem
{
public string Value { get; set; }
}
public class To
{
public object Item { get; set; }
}
public class ToObject
{
public string Value { get; set; }
}
public interface IItem
{
// Nothing; just for grouping.
}
Mapper.CreateMap<From, To>();
Mapper.CreateMap<IItem, object>()
.Include<FromObject, ToObject>();
From from = new From { Item = new FromObject { Value = "Test" } };
To to = Mapper.Map<To>(from);
string type = to.Item.GetType().Name; // ToObjecthttps://stackoverflow.com/questions/32854827
复制相似问题