首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapping对象

AutoMapping对象
EN

Stack Overflow用户
提问于 2015-09-29 22:30:25
回答 2查看 1.3K关注 0票数 0

我遇到了一种奇怪的情况,我有objects和Lists of objects作为实体和合同的一部分来与第三方服务接口。我将试着看看是否可以用实体和契约中更具体的东西来替换实际的对象类,但我很好奇是否有一种方法可以让AutoMapper按原样处理这个问题。

下面是一些虚拟类:

代码语言:javascript
复制
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; }
}

以及快速复制:

代码语言:javascript
复制
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,但是在CreateMapMap调用期间是否有方法指定应该考虑到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-29 22:52:13

我不认为有一种“自动”的方法,因为AutoMapper无法确定From.ItemFromObjectTo.ItemToObject

但是,在创建映射时,可以指定

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-09-29 23:06:18

如果您愿意使用额外的接口,这可以使用Include完成。不过,您不能以这种方式将object映射到object

代码语言:javascript
复制
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; // ToObject
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32854827

复制
相关文章

相似问题

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