AutoMapper 8.0.0: Как игнорировать карту, если свойство имеет значение по умолчанию? - PullRequest
0 голосов
/ 06 февраля 2019

Я должен классифицировать следующим образом:

public class ClassA
{
    public string Item1 { get; set; } // null
    public string Item2 { get; set; } // "This is not null."
    public int Item3 { get; set; } // 0
    public int Item4 { get; set; } // 1 (greater then 0)
}

public class ClassB
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
    public int Item3 { get; set; }
    public int Item4 { get; set; }
}

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<ClassA, ClassB>();
    }
}

Я хочу игнорировать отображение, свойства которого имеют значение по умолчанию в ClassA.

В моем проекте много таких классов, поэтому я не хочу игнорировать каждое свойство отдельно.Мне нужна глобальная конфигурация для этого.

Я прочитал много примеров и потратил на это 5 часов.Я пытаюсь сделать с ForAllMembers, но я не мог этого сделать.

Каков наилучший способ сделать это?

Редактировать 1:

Что мне нужно такого рода вещи?

Я использую DevExtreme Grid и использую всплывающее окно редактирования на сетке.Во всплывающем окне изменились только два свойства и сохранены.Я получаю строку as json для переменной «values», как в примере.

ClassA - это модель представления и имеют атрибуты проверки.ClassB это сущность.

JsonConvert.PopulateObject (values, viewModel);Я могу сопоставить с ClassA строку JSON.Все в порядке.Но другие свойства (Item1 и Item3) по-прежнему имеют значения по умолчанию.Вот почему я хочу игнорировать свойства со значениями по умолчанию.

    [HttpPut]
    public IActionResult DxUpdate(int key, string values)
    {
        /*
            values example:
            {"item2":"This is not null.","item4":1}
         */

        var entity = _service.GetById(...);

        var viewModel = new ClassA();

        JsonConvert.PopulateObject(values, viewModel);

        if (!TryValidateModel(viewModel))
            return BadRequest(ModelState.GetFullErrorMessage());

        entity = _mapper.Map<ClassB>(viewModel);

        _service.Update(entity);

        return Ok();
    }

Редактировать 2:

ClassA имеет нулевые свойства типа int или double, поэтому если свойства не имеют значения NULL, то не имеют значения по умолчаниюценности.

Я в порядке с альтернативным решением.Я не думал о хорошем решении.

1 Ответ

0 голосов
/ 06 февраля 2019

Почему вам нужно игнорировать свойства по умолчанию?

Если A.Item3 является значением по умолчанию 0 (потому что оно никогда не было установлено на любое другое значение), и вы игнорируете отображение этого свойства, B.Item3 равно 0 (потому что Automapper не установленон и, следовательно, B.Item3 имеет значение int по умолчанию);что является точно таким же результатом, как и в случае, когда Automapper фактически копирует значение по умолчанию 0 от A.Item3 до B.Item3.

Что вы ожидаете от других, когда игнорируете свойства по умолчанию?

Может быть причина предотвратить это в тех случаях, когда вы отображаете различные типы свойств, но опубликованный вопрос не содержит такого примера.Кроме того, в этих случаях вы, как правило, будете зацикливаться на необходимости создавать собственные отображения в любом случае, что сводит на нет вашу цель не писать собственный код для каждого отображения.

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