【发布时间】:2019-02-08 17:30:08
【问题描述】:
我正在尝试映射一个源结构,其中一些属性包含在 NonNull<T> 泛型类型(来自 GraphQL.Conventions 库)中。
在实践中,我想使用 AutoMapper 来映射结构:
public class SourceA
{
public NonNull<SourceB> Sub { get; set; }
public string Username { get; set; }
}
public class SourceB
{
public NonNull<string> Address { get; set; }
}
到这样的目的地:
public class DestA
{
public DestB Sub { get; set; }
public string Username { get; set; }
}
public class DestB
{
public string Address { get; set; }
}
这是我的设置:
var source = new NonNull<SourceA>(new SourceA
{
Username = "Test user",
Sub = new NonNull<SourceB>(new SourceB
{
Address = "Test Address"
})
});
var mapper = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SourceA, DestA>();
cfg.CreateMap<NonNull<SourceA>, DestA>()
.ConvertUsing((src, dst, ctx) =>
{
ctx.Mapper.Map(src.Value, dst);
return dst;
});
cfg.CreateMap<SourceB, DestB>();
cfg.CreateMap<NonNull<SourceB>, SourceB>()
.ConvertUsing((src, dst, ctx) =>
{
ctx.Mapper.Map(src.Value, dst);
return dst;
});
}).CreateMapper();
var dest = mapper.Map<DestA>(source);
上面的设置是我能得到的最接近的设置,但它仍然抛出这个异常:
错误映射类型。
映射类型:SourceA -> DestA MappingTest.Program+SourceA -> MappingTest.Program+DestA
类型映射配置:SourceA -> DestA MappingTest.Program+SourceA -> MappingTest.Program+DestA
目标成员:子
任何人都知道执行此操作的简单方法(请记住,我应该能够使用 T4 模板自动生成映射配置,如果这很重要的话)?
【问题讨论】:
标签: automapper