如何使用 Automapper 将 Parent object 解压为 child object?
How to Unpack a Parent object into a child object using Automapper?
我想使用自动映射器解压缩 parent object 并用它创建一个新的 child object:
parent:
public class Parent
{
public Child Child {get;set;}
}
public class Child
{
//stuff
}
第一次映射尝试:
Mapper.CreateMap<Parent, Child>()
.ForMember(dest => dest, opt => opt.MapFrom(src => src.Parent.Child);
错误信息:
Custom configuration for members is only supported for top-level individual members on a type.
这很有道理,所以我尝试自己解决它:
.BeforeMap((src, dest) =>
{
dest = new Child();
});
由于同样的原因,这没有用,尽管我会争辩说我正在解决 object。
那么,如何解析 child object,以便我可以使用自动映射器创建它?
假设您想要与结果相同的对象引用:
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => par.Child);
在这里,您告诉 AutoMapper 您知道如何进行整个映射,在这种情况下,这仅意味着返回内部 Child
属性.
请注意,如果您选择这条路线,则以下内容为真:
Parent p = new Parent();
Child c = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, c); // true
如果您想将整个 Child
实例复制到一个全新的实例中,您可以设置从 Child
→ Child
的映射,然后调用 Mapper.Map
在 ConvertUsing
调用中:
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => Mapper.Map<Child>(par.Child));
Mapper.CreateMap<Child, Child>();
Parent p = new Parent
{
Child = new Child { Name = "Kid" }
};
var ch = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, ch); // false
我想使用自动映射器解压缩 parent object 并用它创建一个新的 child object:
parent:
public class Parent
{
public Child Child {get;set;}
}
public class Child
{
//stuff
}
第一次映射尝试:
Mapper.CreateMap<Parent, Child>()
.ForMember(dest => dest, opt => opt.MapFrom(src => src.Parent.Child);
错误信息:
Custom configuration for members is only supported for top-level individual members on a type.
这很有道理,所以我尝试自己解决它:
.BeforeMap((src, dest) =>
{
dest = new Child();
});
由于同样的原因,这没有用,尽管我会争辩说我正在解决 object。
那么,如何解析 child object,以便我可以使用自动映射器创建它?
假设您想要与结果相同的对象引用:
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => par.Child);
在这里,您告诉 AutoMapper 您知道如何进行整个映射,在这种情况下,这仅意味着返回内部 Child
属性.
请注意,如果您选择这条路线,则以下内容为真:
Parent p = new Parent();
Child c = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, c); // true
如果您想将整个 Child
实例复制到一个全新的实例中,您可以设置从 Child
→ Child
的映射,然后调用 Mapper.Map
在 ConvertUsing
调用中:
Mapper.CreateMap<Parent, Child>()
.ConvertUsing(par => Mapper.Map<Child>(par.Child));
Mapper.CreateMap<Child, Child>();
Parent p = new Parent
{
Child = new Child { Name = "Kid" }
};
var ch = Mapper.Map<Child>(p);
object.ReferenceEquals(parent.Child, ch); // false