Установите для родительских объектов значение null вместо их инициализации в AutoMapper, если источник имеет значение nuC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Установите для родительских объектов значение null вместо их инициализации в AutoMapper, если источник имеет значение nu

Сообщение Anonymous »

Обзор ситуации
AutoMapper предоставляет функцию установки для коллекций значения null, если для нее не было присвоено значение. Я ищу нечто подобное, но объекты.

new MapperConfiguration(cfg => { cfg.AllowNullCollections = true; cfg.AddProfile(новый CustomMapper()); }); Предположим, у меня есть простой DTO

публичный класс RequestModel { общедоступная строка? Заголовок {получить; набор; } } Который должен сопоставляться со свойством Header InnerObject.

Документ общедоступного класса { публичный внутренний объект? ВнутреннийОбъект {получить; набор; } } общественный класс InnerObject { { общедоступная строка? Заголовок {получить; набор; } } Как вы можете видеть, поля допускают значение NULL, что означает, что заголовок DTO может иметь значение NULL.
[*]Если заголовок не равен нулю, AutoMapper автоматически создает зависимые объекты (InnerObject) и присваивает правильное значение. [*]Когда заголовок имеет значение null, AutoMapper все равно создает экземпляр, хотя InnerObject.Header не будет присвоено никакого значения.
CreateMap() .ForPath( dest => dest.InnerObject.Header, opts => opts.MapFrom(src => src.Header)); Вопрос Вопрос заключается в том, как настроить AutoMapper так, чтобы он не инициализировал родительские объекты (в нашем случае InnerObject), если дочерние объекты (в нашем случае Header) имеют значение null.
Пример Json
Ожидается:

"innerObject": ноль Факт

"innerObject": { «заголовок»: ноль } Похожие случаи [*]Решение, представленное в принятом ответе, неэффективно, поскольку требует создания целевого объекта вручную. Таким образом, если имеется 100 различных свойств, для них потребуется написать собственные преобразования. Ответ был опубликован в 2015 году, возможно, AutoMapper внес какие-либо обновления. AutoMapper установил для назначения значение null при условии исходного свойства
[*]
Ответ на метод расширения, предложенный в следующей теме, может быть решением для простых объектов, но он не будет работать со сложными объектами, когда необходимо создать 3 родительских объекта (например, ParentalComplexObject.ChildrenComplexObject1.ChildrenComplexObject2.SimpleString). Как мне условно установить для целевого объекта значение null с помощью automapper
Возможное решение
Говоря о потенциальном обходном пути, можно ввести какую-то служебную службу для выполнения очистки, устанавливающей для объектов значение null, если его внутренние дочерние элементы (сложные объекты или свойства) имеют значение null, однако, по моему мнению, это не элегантное решение. Установите для объекта значение null, если все его свойства имеют значение null в C#
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»