[英]AutoMapper mapping nested propery of object-type
当我使用 AutoMapper 将一个对象从一个命名空间映射到另一个命名空间(具有相同的数据类型)时,它似乎映射到了错误的命名空间。
简单示例:
namespace AutoMapperSamples.Namespace10
{
public class Outer
{
public int Value { get; set; }
public object Inner { get; set; }
}
}
namespace AutoMapperSamples.Namespace20
{
public class Outer
{
public int Value { get; set; }
public object Inner { get; set; }
}
}
像这样映射:
var dest = config.CreateMapper().Map<Namespace10.Outer, Namespace20.Outer>(source);
结果Outer
类正确映射到Namespace20.Outer
但Inner
对象的类型为Namespace10.Inner
(而不是 if Namespace20
)。 由于这是我的类是从 web 服务 (svcUtil) 生成的(其中该字段是一个选择类型(可以是两个类之一),因此创建为对象类型。
有没有方便的方法来解决这个问题?
这是因为映射配置没有自定义规则来映射object
到object
。 可能的解决方法是手动添加AfterMap
操作和映射Inner
属性:
public MapperConfiguration Config { get; set; }
[SetUp]
public void SetUp()
{
var innerConfig = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Namespace10.Inner, Namespace20.Inner>();
});
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Namespace10.Outer, Namespace20.Outer>()
.AfterMap((src, dest) =>
{
dest.Inner = innerConfig.CreateMapper().Map<Namespace20.Inner>(src.Inner as Namespace10.Inner);
});
});
Config = config;
}
[Test]
public void Map()
{
Namespace10.Outer source = new Namespace10.Outer();
source.Inner = new Namespace10.Inner();
var dest = Config.CreateMapper().Map<Namespace10.Outer, Namespace20.Outer>(source);
Assert.AreEqual(typeof(Namespace20.Inner).FullName, dest.Inner.GetType().FullName);
}
您可以改用自定义值解析器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.