【发布时间】:2020-07-08 18:42:23
【问题描述】:
我正在处理一组非常糟糕的生成类,这些类具有大量对象类型的属性,其中包含我想要映射的各种类型。类映射似乎有效,但是属性引用只是直接复制而不映射引用的对象。
如何定义映射 Items 属性内的对象的映射?我有很多这样的对象,所以希望我可以相当简单地定义它......
例子:
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<TerribleType1, TerribleType1Dto>();
cfg.CreateMap<TerribleType2, TerribleType2Dto>();
cfg.CreateMap<TerribleObject, TerribleObjectDto>();
});
var mapper = config.CreateMapper();
var terribleObject = new TerribleObject
{
Items = new object[] { new TerribleType1 { PropA = "Test1" }, new TerribleType2 { PropA = "Test2" } }
};
var terribleObjectDto = mapper.Map<TerribleObjectDto>(terribleObject);
//Want a TerribleType1Dto but instead I get a TerribleType1
Console.WriteLine(terribleObjectDto.Items[0].GetType().Name);
}
}
class TerribleObject
{
// Contains some TerribleType1 and TerribleType2 objects, these don't share a common base.
public object[] Items { get; set; }
}
class TerribleObjectDto
{
//Want this to have some TerribleType1Dto and TerribleType2Dto objects.
public object[] Items { get; set; }
}
public class TerribleType1
{
public string PropA { get; set; }
}
public class TerribleType1Dto
{
public string PropA { get; set; }
}
public class TerribleType2Dto
{
public string PropA { get; set; }
}
public class TerribleType2
{
public string PropA { get; set; }
}
【问题讨论】:
-
你考虑过使用反射吗?
-
@LucianBargaoanu 我阅读了文档。如果您有答案,请提供,我很乐意接受。我尝试使用带有 .Include 的
-
@Tarik 我想我可以。哈哈,到目前为止,我已经使用 AutoMapper,它适用于我 90% 的对象。我宁愿现在不回头或拥有两个对象映射器,但如果必须,我想我可以。
标签: c# automapper