Automapper父子映射将孙子属性设置为null

问题描述 投票:0回答:1

在对象之间映射时,Automapper似乎忽略了孙对象。这样我只能获得2级递归。我至少需要3个级别,最好是n个级别。

我如何让Automapper返回所有完好无缺的正确对象?

我可以通过序列化DbPOCO并将其反序列化为Dto来解决此问题,但这意味着克服应用程序中的问题,和/或对该我不喜欢的特定方法做一些不同的事情。

给出我的数据库Poco

    public class Menu : SqlTable, IParentChild<Menu>
    {
       public string Label {get; set;}
       public string Route {get; set;}
       public float Sequence { get; set; }
       public int? ParentID {get; set;}
       public Menu Parent {get; set;}
       public IList<Menu> Children { get; set; }
    }

我可以返回(使用某种递归魔术)一个像这样序列化的对象,但是它包含(删除了)数据库审核列和其他我不想通过我的API进行通信的表通用项目。

[
  {
    "Label": "Main Menu 1",
    "Route": "",
    "Sequence": 1,
    "ParentID": null,
    "Parent": null,
    "Children": [
      {
        "Label": "Menu 1 Sub 1",
        "Route": "",
        "Sequence": 1,
        "ParentID": 1,
        "Parent": null,
        "Children": [
          {
            "Label": "Menu 1 Sub 1 Sub 1",
            "Route": "",
            "Sequence": 1,
            "ParentID": 2,
            "Parent": null,
            "Children": [],
            ...
          },
          {
            "Label": "Menu 1 Sub 1 Sub 2",
            "Route": "",
            "Sequence": 2,
            "ParentID": 2,
            "Parent": null,
            "Children": [],
            ...
          }
        ],
        ...
      },
      {
        "Label": "Menu 1 Sub 2",
        "Route": "",
        "Sequence": 2,
        "ParentID": 1,
        "Parent": null,
        "Children": [],
        "ID": 5,
        ...
      }
    ],
    ...
  },
  {
    "Label": "Main Menu 2",
    "Route": "",
    "Sequence": 2,
    "ParentID": null,
    "Parent": null,
    "Children": [
      {
        "Label": "Menu 2 Sub 1",
        "Route": "",
        "Sequence": 1,
        "ParentID": 6,
        "Parent": null,
        "Children": [],
        ...
      }
    ],
    ...
  }
]

[当我将其传递给Automapper时,将其映射到以下DTO

public class WebApplicationMenuModel
    {
        public string Label { get; set; }
        public string Route { get; set; }
        public float Sequence { get; set; }
        public IEnumerable<WebApplicationMenuModel> Children { get; set; }

    }

来自我原始对象的孙辈被设置为null

[
  {
    "Label": "Main Menu 1",
    "Route": "",
    "Sequence": 1,
    "Children": [
      {
        "Label": "Menu 1 Sub 1",
        "Route": "",
        "Sequence": 1,
        "Children": null
      },
      {
        "Label": "Menu 1 Sub 2",
        "Route": "",
        "Sequence": 2,
        "Children": null
      }
    ]
  },
  {
    "Label": "Main Menu 2",
    "Route": "",
    "Sequence": 2,
    "Children": [
      {
        "Label": "Menu 2 Sub 1",
        "Route": "",
        "Sequence": 1,
        "Children": null
      }
    ]
  }
]

地图配置文件非常基本

    public class MenuProfile : Profile
    {
        public MenuProfile()
        {
            CreateMap<Menu, WebApplicationMenuModel>()
                .ReverseMap();
        }
    }

recursion orm automapper poco dto
1个回答
1
投票

请参阅Lucian Bargaoanu的回复。需要使用主Automapper分支(9.1.0-ci-01627)才能从MyGet支持此功能。

https://docs.automapper.org/en/stable/The-MyGet-build.html

© www.soinside.com 2019 - 2024. All rights reserved.