Обзор ситуации
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#
Установите для родительских объектов значение null вместо их инициализации в AutoMapper, если источник имеет значение nu ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение