我可以根据Automapper中父级父级的类型有条件地忽略属性吗?

时间:2015-08-04 10:58:12

标签: automapper

基本上我想有条件地忽略基于映射父级的属性。

一个例子:

以下是我的DTO:

public class PersonDTO
{
   public int Id { get; set; }
   public string Name { get; set; }
   public List<EmploymentDTO> Employments { get; set; }
   public List<HobbyDTO> Hobbies { get; set; }
}

public class EmploymentDTO
{
   public int Id { get; set; }
   public string Name { get; set; }
   public PersonDTO Person { get; set; }
}

public class HobbyDTO
{
   public int Id { get; set; }
   public string Name { get; set; }
   public PersonDTO Person { get; set; }
}

如果我要求一个人,那么我希望看到它的工作和爱好归来,但不是就业或爱好的人。所以我希望在以下JSON中看到person对象:

{
  Id : 123,
  Name : "Person1",
  Employments [
  {
    Id : 1,
    Name : "Employment1",
    Person : { ... }
  },
  {
    Id : 2,
    Name : "Employment2",
    Person : { ... }
  }],
  Hobbies [
  {
    Id : 1,
    Name : "Hobby1",
    Person : { ... }
  },
  {
    Id : 2,
    Name : "Hobby2",
    Person : { ... }
  }]
}

同样,如果请求就业,我希望在person对象上返回不带雇员和爱好属性的以下JSON:

{
  Id : 1,
  Name : "Employment1"
  Person : {
    Id : 123,
    Name : "Person1",
    Employments : [ ... ],
    Hobbies : [ ... ]
  }
}

使用Automapper有没有办法做到这一点?我玩过Ignore和Condition但是没能达到我的需求。我想我需要根据父父对象的内容忽略属性。

1 个答案:

答案 0 :(得分:0)

你看过明确的扩张吗? https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#explicit-expansion

您可以指示AutoMapper仅在运行时展开某些属性。它可以在AutoMapper的LINQ模式下使用。