AutoMapper - сложное отображение, включающее вызов функции
Я только начинаю работать с AutoMapper и люблю, как он работает. Тем не менее, я считаю, что это может отобразить некоторые сложные сценарии, которые я в настоящее время подключаю вручную. У кого-нибудь есть какие-либо предложения / советы, чтобы убрать мои ручные процессы из приведенного ниже упрощенного примера и ускорить мою кривую обучения?
У меня есть исходный объект, например, так:
public class Source
{
public Dictionary<string, object> Attributes;
public ComplexObject ObjectWeWantAsJson;
}
и объект назначения, например, так:
public class Destination
{
public string Property1; // Matches with Source.Attributes key
public string Property2; // Matches with Source.Attributes key
// etc.
public string Json;
}
Моя конфигурация для AutoMapper минимальна:
var config = new MapperConfiguration(cfg => {});
var mapper = config.CreateMapper();
И мой код конверсии выглядит так:
var destinationList = new List<Destination>();
foreach (var source in sourceList)
{
var dest = mapper.Map<Dictionary<string, object>, Destination(source.Attributes);
// I'm pretty sure I should be able to combine this with the mapping
// done in line above
dest.Json = JsonConvert.SerializeObject(source.ObjectWeWantAsJson);
// I also get the impression I should be able to map a whole collection
// rather than iterating through each item myself
destinationList.Add(dest);
}
Любые указатели или предложения являются наиболее ценными. Заранее спасибо!
1 ответ
Вы могли бы быть заинтересованы в написании кода преобразования с использованием TypeConverter
,
internal class CustomConverter : TypeConverter<List<Source>, List<Destination>>
{
protected override List<Destination> ConvertCore(List<Source> source)
{
if (source == null) return null;
if (!source.Any()) return null;
var output = new List<Destination>();
output.AddRange(source.Select(a => new Destination
{
Property1 = (string)a.Attributes["Property1"],
Property2 = (string)a.Attributes["Property2"],
Json = JsonConvert.SerializeObject(a.ObjectWeWantAsJson)
}));
return output;
}
}
var source = new List<Source>
{
new Source{
Attributes = new Dictionary<string,object>{
{"Property1","Property1-Value"},
{"Property2","Property2-Value"}
},
ObjectWeWantAsJson = new ComplexObject{Name = "Test", Age = 27}
}
};
Mapper.CreateMap<List<Source>, List<Destination>>().
ConvertUsing(new CustomConverter());
var dest = Mapper.Map<List<Destination>>(source);