Automapper: как отобразить иерархию в словаре - PullRequest
0 голосов
/ 17 февраля 2019

В моей программе я представляю динамические объекты с помощью словаря, например:

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 проецировать дерево на полную глубину?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...