gpt4 book ai didi

c# - 如何使用 Automapper 将父对象解包到子对象中?

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

我想使用 automapper 解压一个父对象并用它创建一个新的子对象:

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();
});

出于同样的原因,这不起作用,尽管我会争辩说我正在解析该对象。

那么,如何解析子对象,以便我可以使用自动映射器创建它?

最佳答案

假设您想要与结果相同的对象引用:

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 实例复制到一个全新的实例中,您可以设置一个从 ChildChild 的映射,然后然后在 ConvertUsing 调用中调用 Mapper.Map:

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

关于c# - 如何使用 Automapper 将父对象解包到子对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939986/

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