gpt4 book ai didi

c# - 使用 AutoMapper 动态映射包括数组在内的对象

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:51 25 4
gpt4 key购买 nike

我正在尝试构建一种从一种类型映射到另一种类型的方法,我知道它们将(应该)具有相同的结构。 Related Question .

为了简化繁琐的操作,我使用了 Codeplex 的 AutoMapper,具有以下功能:

private static List<Type> seenTypes = new List<Type>();

private static void MapDataObjects(Type a, Type b)
{
AutoMapper.Mapper.CreateMap(a, b);

PropertyInfo[] aProps = a.GetProperties();
PropertyInfo[] bProps = b.GetProperties();
foreach (PropertyInfo aProp in aProps)
{
if (aProp.PropertyType.Namespace.StartsWith("System")
|| seenTypes.Contains(aProp.PropertyType))
continue;

foreach (PropertyInfo bProp in bProps)
{
if (aProp.Name == bProp.Name)
{
MapDataObjects(aProp.PropertyType, bProp.PropertyType);
seenTypes.Add(aProp.PropertyType);
break;
}
}
}
}

单步执行代码时似乎工作正常,但是调用我的 Map 函数会出现以下错误:

AutoMapper.AutoMapperMappingException: 
Trying to map TDXDataTypes.ClientActivity[] to ClientActivity[].
Using mapping configuration for TDXDataTypes.ClientActivity[] to ClientActivity[]
Destination property: Activities
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
---> System.ArgumentException:
Type 'ClientActivity[]' does not have a default constructor

最佳答案

找到解决方案(在提出问题之前应该更加努力):

 if (aProp.Name == bProp.Name)
{
if (aProp.PropertyType.IsArray)
{
MapDataObjects(aProp.PropertyType.GetElementType(), bProp.PropertyType.GetElementType());
seenTypes.Add(aProp.PropertyType.GetElementType());
break;
}
else
{
MapDataObjects(aProp.PropertyType, bProp.PropertyType);
seenTypes.Add(aProp.PropertyType);
break;
}
}

关于c# - 使用 AutoMapper 动态映射包括数组在内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com