C# 自动映射-使用命名约定映射复杂对象,而不提供内部映射
我有两个属性完全相同的复杂对象 现在使用C# 自动映射-使用命名约定映射复杂对象,而不提供内部映射,c#,automapper,C#,Automapper,我有两个属性完全相同的复杂对象 现在使用AutoMapper,我通常需要执行以下操作: Mapper.CreateMap<ObjA, ObjB>(); Mapper.CreateFullMapOnIdenticalObjectsWithInnerTypes<ObjA, ObjB>(); 编辑: 下面是一个例子: 两个具有不同命名空间的相同类: namespace NameSpace1 { public class Obj1 { pub
AutoMapper
,我通常需要执行以下操作:
Mapper.CreateMap<ObjA, ObjB>();
Mapper.CreateFullMapOnIdenticalObjectsWithInnerTypes<ObjA, ObjB>();
编辑:
下面是一个例子:
两个具有不同命名空间的相同类:
namespace NameSpace1
{
public class Obj1
{
public string Str { get; set; }
public int Num { get; set; }
public InnerObj1 InnerObj1 { get; set; }
}
public class InnerObj1
{
public string StrInner1 { get; set; }
public int NumInner1 { get; set; }
public AnotherInnerObj1 AnotherInnerObj1 { get; set; }
}
public class AnotherInnerObj1
{
public string Str { get; set; }
}
}
namespace NameSpace2
{
public class Obj1
{
public string Str { get; set; }
public int Num { get; set; }
public InnerObj1 InnerObj1 { get; set; }
}
public class InnerObj1
{
public string StrInner1 { get; set; }
public int NumInner1 { get; set; }
public AnotherInnerObj1 AnotherInnerObj1 { get; set; }
}
public class AnotherInnerObj1
{
public string Str { get; set; }
}
}
创建一个模拟的名称空间1.Obj1
:
public static NameSpace1.Obj1 Create()
{
return new NameSpace1.Obj1
{
Num = 10,
Str = "Obj1",
InnerObj1 = new NameSpace1.InnerObj1
{
NumInner1 = 11,
StrInner1 = "InnerObj1",
AnotherInnerObj1 = new NameSpace1.AnotherInnerObj1
{
Str = "AnotherInnerObj1"
}
}
};
}
这就是我想要的:
Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
var obj1 = Create();
var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);
Mapper.CreateMap();
var obj1=Create();
var obj2=Mapper.Map(obj1);
但这会引发异常,因为我需要定义内部映射。这将有助于:
Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
Mapper.CreateMap<NameSpace1.InnerObj1, NameSpace2.InnerObj1>();
Mapper.CreateMap<NameSpace1.AnotherInnerObj1, NameSpace2.AnotherInnerObj1>();
var obj1 = Create();
var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);
Mapper.CreateMap();
CreateMap();
CreateMap();
var obj1=Create();
var obj2=Mapper.Map(obj1);
您的意思是,当objA展开时,您不想继续向objB添加新的内部属性吗?不。。这两个对象将是相同的。我不想在将来的属性上添加映射..但是如果两个对象都相同,这意味着它们都有相同的属性和相同的属性类型,所以将objectA映射到objectB就足够了,因为automapper将使用反射来匹配属性。它会一直工作,直到他得到一个复杂的方法,然后他需要内部映射。你能告诉我们automapper需要内部映射来映射的情况吗?将类定义添加到问题中。
Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
Mapper.CreateMap<NameSpace1.InnerObj1, NameSpace2.InnerObj1>();
Mapper.CreateMap<NameSpace1.AnotherInnerObj1, NameSpace2.AnotherInnerObj1>();
var obj1 = Create();
var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);