C# 如何使用AutoMapper从ienumerable(或数组)列表属性映射到列表?

C# 如何使用AutoMapper从ienumerable(或数组)列表属性映射到列表?,c#,arrays,automapper,automapper-3,C#,Arrays,Automapper,Automapper 3,我使用AutoMapper试图简化一些restapi响应的响应。我有一个名为Messages的具有数组属性的对象,我希望将其映射到客户端应用程序中的列表或数组 我尝试了以下方面的变化: Mapper.CreateMap<MessagesResponse, Message[]>() .ForMember(dest => dest, opt => opt.MapFrom(src => src.Messages)); ....

我使用AutoMapper试图简化一些restapi响应的响应。我有一个名为Messages的具有数组属性的对象,我希望将其映射到客户端应用程序中的列表或数组

我尝试了以下方面的变化:

Mapper.CreateMap<MessagesResponse, Message[]>()
                      .ForMember(dest => dest, opt => opt.MapFrom(src => src.Messages)); 
....
Mapper.CreateMap<MessagesResponse, List<SimplifiedMessage>>().ForMember(dest => dest.Add(new SimplifiedMessage()), opt => opt.MapFrom(src => src.Messages.GetEnumerator()));

我已经精简了类定义,但以下内容应该有助于实现您想要实现的目标

public class MessagesResponse
{
    public Message[] Messages { get; set; }
}

public class Message
{
    public string Content { get; set; }

    public string SenderId { get; set; }

    public int[] NotifiedUserIds { get; set; }

}
public class SimplifiedMessage
{
    public string Content { get; set; }

    public string SenderId { get; set; }

    public string FromIDs { get; set; }
}
static void Main(string[] args)
    {
        SimplifiedMessage[] simplifiedMessages = null;
        MessagesResponse response = new  MessagesResponse
        {
             Messages = new Message[]
             {
                 new Message
                 {
                      NotifiedUserIds = new[]{1,2,3,},
                      Content = "One"
                 } ,
                 new Message
                 {
                      NotifiedUserIds = new[]{4,5,6},
                      Content = "Two"
                 },
                 new Message
                 {
                     NotifiedUserIds = new[]{7,8,9},
                      Content = "Three"
                 }
             }
        };
        var map = Mapper.CreateMap<Message, SimplifiedMessage>()
            .ForMember(s => s.Content, m => m.MapFrom<string>(msg => msg.Content))
            .ForMember(s => s.FromIDs , m => m.MapFrom<string>(msg => string.Join(",",msg.NotifiedUserIds)));
        simplifiedMessages = Mapper.Map<Message[],SimplifiedMessage[]>(response.Messages);
   }
公共类消息响应
{
公共消息[]消息{get;set;}
}
公共类消息
{
公共字符串内容{get;set;}
公共字符串SenderId{get;set;}
public int[]通知duserids{get;set;}
}
公共类简化消息
{
公共字符串内容{get;set;}
公共字符串SenderId{get;set;}
来自ID{get;set;}的公共字符串
}
静态void Main(字符串[]参数)
{
SimplifiedMessage[]simplifiedMessages=null;
MessagesResponse response=新消息响应
{
消息=新消息[]
{
新消息
{
NotifiedUserIds=new[]{1,2,3,},
Content=“一”
} ,
新消息
{
NotifiedUserIds=new[]{4,5,6},
Content=“两个”
},
新消息
{
NotifiedUserIds=new[]{7,8,9},
Content=“三”
}
}
};
var map=Mapper.CreateMap()
.ForMember(s=>s.Content,m=>m.MapFrom(msg=>msg.Content))
.ForMember(s=>s.FromIDs,m=>m.MapFrom(msg=>string.Join(“,”,msg.notifiedUserId));
simplifiedMessages=Mapper.Map(response.Messages);
}

我已经设法使用Mapper.CreateMap().ConstructUsing(x=>x.Messages.Select(y=>CreateMessage(x,y)).ToList()实现了这一点;但可能还有更好的办法。我愿意接受建议。
public class MessagesResponse
{
    public Message[] Messages { get; set; }
}

public class Message
{
    public string Content { get; set; }

    public string SenderId { get; set; }

    public int[] NotifiedUserIds { get; set; }

}
public class SimplifiedMessage
{
    public string Content { get; set; }

    public string SenderId { get; set; }

    public string FromIDs { get; set; }
}
static void Main(string[] args)
    {
        SimplifiedMessage[] simplifiedMessages = null;
        MessagesResponse response = new  MessagesResponse
        {
             Messages = new Message[]
             {
                 new Message
                 {
                      NotifiedUserIds = new[]{1,2,3,},
                      Content = "One"
                 } ,
                 new Message
                 {
                      NotifiedUserIds = new[]{4,5,6},
                      Content = "Two"
                 },
                 new Message
                 {
                     NotifiedUserIds = new[]{7,8,9},
                      Content = "Three"
                 }
             }
        };
        var map = Mapper.CreateMap<Message, SimplifiedMessage>()
            .ForMember(s => s.Content, m => m.MapFrom<string>(msg => msg.Content))
            .ForMember(s => s.FromIDs , m => m.MapFrom<string>(msg => string.Join(",",msg.NotifiedUserIds)));
        simplifiedMessages = Mapper.Map<Message[],SimplifiedMessage[]>(response.Messages);
   }