在我的程序中,我通过使用Dictionary来表示动态对象,如下所示:
public class MyObject
{
public Guid Id { get; set; }
public Dictionary<string, object> Values { get; set; }
public MyObject()
{
Id = Guid.NewGuid();
Values = new Dictionary<string, object>();
}
public int InternalAndUnneeded {get;set;} // I don't want to expose it
}
这些对象可以破坏任何类型的属性,包括MyObject的类型。
我想将整个层次结构投影到MyObjectDto
的新层次结构中:
public class MyObjectDto
{
public Guid Id { get; set; }
public Dictionary<string, object> Values { get; set; }
}
我写了一个简单的测试:
[Test]
public void HierarchicalTest()
{
MapperConfiguration config = new MapperConfiguration(c => {
c.CreateMap<MyObject, MyObjectDto>();
});
var mapper = config.CreateMapper();
// prepare: Order references Customer
MyObject customer = new MyObject();
customer.Values.Add("FirstName", "John");
customer.Values.Add("LastName", "Doe");
customer.Values.Add("Age", 38);
MyObject order = new MyObject();
order.Values.Add("Title", "Nails, 1000 items");
order.Values.Add("Total", 890.50m);
order.Values.Add("Customer", customer);
MyObjectDto dto = mapper.Map<MyObjectDto>(order);
Assert.That(dto, Is.TypeOf<MyObjectDto>());
Assert.That(dto.Values["Customer"], Is.TypeOf<MyObjectDto>());
}
但是第二个断言却失败了:
预期
PublicAPI.Unit.Tests.MyObjectDto
,但PublicAPI.Unit.Tests.MyObject
基本上,它仅转换顶级对象,但不转换为存储在字典中的值的对象。如何使Automapper投射树的最深处?