自动映射器:如何在词典中映射层次结构

时间:2019-02-17 18:57:54

标签: c# automapper

在我的程序中,我通过使用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投射树的最深处?

0 个答案:

没有答案