C# 如何将简单对象映射到包含automapper列表的复杂对象

C# 如何将简单对象映射到包含automapper列表的复杂对象,c#,automapper,C#,Automapper,我正在读一个JSON文件 "data": [ { "workPhaseID": 1, "workPhaseName": "Phase 1", "millID": 1, "millName": "Mill 1", }, { "workPhaseID": 2, "workPhaseName": "Phase 2", "millID": 1, "millName": "Mill 1"

我正在读一个JSON文件

"data": [
    {
      "workPhaseID": 1,
      "workPhaseName": "Phase 1",
      "millID": 1,
      "millName": "Mill 1",
    },
    {
      "workPhaseID": 2,
      "workPhaseName": "Phase 2",
      "millID": 1,
      "millName": "Mill 1",
    },
    ... ergo there is a list of mills and each mill contains a set of work phases
]
转换为简单对象列表的。我想将简单对象列表转换为复杂对象列表,以便主要对象是磨机,磨机将包含与之相关的工作阶段列表。然后我可以将它作为一个新的JSON推出

我可以找到很多关于如何使用automapper将复杂对象展平为简单对象的示例,我可以在stackoverflow中找到一些简单->复杂映射的示例,但没有一个与我的案例完全匹配,我无法将信息拼凑到足够的程度来完成我的具体案例,因此非常感谢您的帮助

以下是课程:

公共类工作阶段
{
公共短工作阶段ID{get;set;}
公共字符串WorkPhaseName{get;set;}
公共字节?MillID{get;set;}
公共字符串名称{get;set;}
}
公务舱
{
公共字符串名称{get;set;}
公共字节?MillID{get;set;}
公共列表行{get;set;}
}
公共类工作阶段Formilldo
{
公共短工作阶段ID{get;set;}
公共字符串WorkPhaseName{get;set;}
}
因此,我想把工作阶段映射到米尔多

我知道,如果我没有列表,而MillDO中的最后一行是“publicworkphaseformilldo行{get;set;}”,那么这个映射将起作用:

Mapper.Initialize(配置=>
{
config.CreateMap()
.ForMember(dest=>dest.Lines,act=>act.MapFrom(src=>newworkphaseformilldo())
{
WorkPhaseID=src.WorkPhaseID,
WorkPhaseName=src.WorkPhaseName,
}));
});
但是这还不够,我需要在每个mill对象下有一个工作阶段列表

因此,最终结果应该是一个MillDO对象列表(1 object=1 mill),每个MillDO应该包含一个WorkPhaseForMillDO对象列表。WorkPhaseForMillDO中的workPhaseID是唯一的数字,workPhaseName不一定是唯一的

为了帮助理解我想要的对象结构,生成的JSON应该如下所示:

[{
    "millId": 1,
    "millName": "Mill 1",
    "workPhases": [{
        "workPhaseId": 1,
        "workPhaseName": "Phase 1"
        }, {
        "workPhaseId": 2,
        "workPhaseName": "Phase 2"
        },
    ...
    }],
    "millId": 2,
    "millName": "Mill 2",
    "workPhases": [{
        "workPhaseId": 5,
        "workPhaseName": "Phase 1"
        }, {
        "workPhaseId": 6,
        "workPhaseName": "Phase 6"
        },
    ...
    }]
    ...
}]

您需要使用linq创建组,然后使用AM进行映射。谢谢您的回复。不过,你能详细说明一下吗?我对linq有点熟悉,但还不足以完全理解你的意思。你需要使用linq建立你的群组,然后我来映射。谢谢你的回复。不过,你能详细说明一下吗?我对linq有点熟悉,但还不足以完全理解你的意思。