Предположим, у вас есть следующие классы:
public class Source
{
public string Data { get; set; }
}
public class Destination
{
public JObject Data { get; set; }
}
И вы конфигурируете AutoMapper, используя это:
Mapper.Initialize(
cfg =>
{
cfg.CreateMap<Source, Destination>()
.ForMember(
d => d.Data,
c => c.MapFrom(s => JsonConvert.DeserializeObject(s.Data ?? "")
}
);
Когда вы отображаете объект Source
со значением для Data
это приводит к нулевому json (например, нулевое значение, пустая строка или строка «null», все из которых приводят к тому, что JsonConvert возвращает null), значение Destination.Data
в конечном итоге устанавливается равным пустому JObject вместо null.
Есть ли способ вообще запретить Automapper инициализировать целевой элемент?
Есть несколько разных вещей, которые вы можете сделать, но большинство из них покрывают только часть случаев.Например, вы можете добавить условие в сопоставление, чтобы оно применялось только тогда, когда Source.Data
не равно нулю или не пусто.Но это не работает, если Source.Data
является строкой "null".
Есть ли лучший способ справиться с этим без необходимости добавлять кучу особых условий обсадной колонны снаружи?
Side Примечание: Я могу заставить его работать, предоставив отображение верхнего уровня между строкой и JObject.Но это означало бы, что я должен использовать одну и ту же логику для каждого случая, и я ТОЛЬКО хочу, чтобы она применялась к этому одному свойству.