Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AutoMapper进行映射时动态忽略属性_C#_.net Core_Automapper - Fatal编程技术网

C# 使用AutoMapper进行映射时动态忽略属性

C# 使用AutoMapper进行映射时动态忽略属性,c#,.net-core,automapper,C#,.net Core,Automapper,我在.net核心应用程序中使用AutoMapper从我的Nhibernate实体创建DTO,并将其作为JSON发送到客户端。但是,有些请求需要省略实体上的某些属性。例如,假设我有以下类: public class Person { public ICollection<Friend> Friends { get; set; } } public class PersonDTO { public ICollection<FriendDTO> Friends

我在.net核心应用程序中使用AutoMapper从我的Nhibernate实体创建DTO,并将其作为JSON发送到客户端。但是,有些请求需要省略实体上的某些属性。例如,假设我有以下类:

public class Person
{
    public ICollection<Friend> Friends { get; set; }
}

public class PersonDTO
{
    public ICollection<FriendDTO> Friends { get; set; }
}
公共类人物
{
公共ICollection好友{get;set;}
}
公共类个人
{
公共ICollection好友{get;set;}
}
现在,有些情况下,我需要向客户发送一个人及其所有朋友,但有时我只需要这个人。我有一个automapper配置,它定义了Person和PersonDTO之间的简单映射,没有省略属性,因为这是最常见的情况。但是,与其创建两个单独的DTO(一个映射了Friends属性,另一个忽略了它),不如在映射时以某种方式指定它。我尝试了以下方法,但似乎不起作用:

var personDtoWithoutFriends = _mapper.map<Person, PersonDTO>(person,
    opts => opts.ConfigureMap()
        .ForMember(dest => dest.Friends, act => act.Ignore()))
var personDtoWithoutFriends=\u mapper.map(person,
opts=>opts.ConfigureMap()
.ForMember(dest=>dest.Friends,act=>act.Ignore())

我知道我可以用多个DTO解决这个问题,但是这在我的应用程序中是一种非常常见的模式,我最终会创建大量的DTO。在我需要的少数情况下忽略某些属性似乎是一个更优雅的解决方案。我是做错了什么,还是使用AutoMapper无法做到这一点?

我不确定这是否适用于您,但创建两个不同的映射器怎么样,一个用于与朋友进行映射,另一个用于在需要时不进行映射并在两者之间切换?我不确定这是否适用于您,但创建两个不同的映射器如何,一个用于与朋友进行映射,另一个用于在需要时不进行映射并在两者之间切换?