问题是将嵌套对象的动态列表映射到平坦的DTO。它包括展平嵌套对象。另外,它是接口类型。
NoSuchBeanDefinitionException: No bean named 'helloServiceEndpoint' available
我们有多种具体类型的IMainOutput,ICalcOutput,ISupportOutput,它们可以返回属于不同的源系统。 例如。 ABC系统具有ABCMainOutput,ABCCalcOutput,ABCSupportOutput XYZ系统具有XYZMainOutput,XYZCalcOutput等
现在我们为每个源系统(如ABCDto,XYZDto等扁平结构)提供了DTO。
问题是根据对象类型将IEnumerable序列化并映射到IEnumerable或IEnumerable,并使列表保持排序。
我尝试如下使用Automapper
Interface IfinalOutput
{
object MainOutput;
object CalcOutput;
object SupportOutput;
}
class finalOutput<T,T2,T3> : IfinalOutput where T: IMainOutput, T2: ICalcOutput, T3: ISupportOutput
{
public object MainOutput;
public object CalcOutput;
Public object SupportOutput;
...Other Properties
}
现在,所有属性均未映射。请指导如何将calc和支持输出映射到Dto,并避免使用forloop。我可以使用Automapper或ValueInjector。需要一种有效的方法。
答案 0 :(得分:0)
我实施了以下更改,并且有效。
首先,我必须为我所有的IMainOutput具体类创建地图, ICalcOutput,ISupportOutput和特定的源系统,如下所示:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<ABCMainOutput, ABCdto>();
cfg.CreateMap<ABCCalcOutput, ABCdto>();
cfg.CreateMap<ABCSupportOutput, ABCdto>();
});
第二,我添加了一个automapper扩展名:
public static TDestination Map<TSource, TDestination>(
this TDestination destination, TSource source)
{
return Mapper.Map(source, destination);
}
最后,我使用上述扩展序列化最终输出。
public List<Tto> Serialize<Tfrom, Tto>(
IEnumerable<IFinalOutput> outputTableCompositeViewModel)
{
List<Tto> sourceSystemDTOList = new List<Tto>();
foreach (var item in outputTableCompositeViewModel)
{
Tto outputItem = new Tto();
var outputTableItem = item.MainOutput;
var supportTableItem = item.SupportOuput;
var calculatedTableItem = item.CalcOutput;
outputItem = Mapper.Map<Tto>(outputTableItem)
.Map(calculatedTableItem)
.Map(supportTableItem);
sourceSystemDTOList.Add(outputItem);
}
return new List<Tto>(sourceSystemDTOList);
}
该解决方案有效。