C# 如何映射具有4个不同特性类的2个对象?

C# 如何映射具有4个不同特性类的2个对象?,c#,automapper,C#,Automapper,我有6个类,我想用AutoMapper映射它们 public class Alert { public string MessageSender { get; set; } public Site Site { get; set; } public IEnumerable<Recipient> Recipients { get; set; } } pub

我有6个类,我想用AutoMapper映射它们

 public class Alert
        {
                public string MessageSender { get; set; }
                public Site Site { get; set; }
                public IEnumerable<Recipient> Recipients { get; set; }
        }

public class AlertModel
    {
        public string Sender { get; set; }
        public SiteModel Site { get; set; }
        public IEnumerable<RecipientModel> Recipients { get; set; }
}


public class Site
    {
        public int Id { get; set; }
    }

public class SiteModel
    {
        public int Id { get; set; }
    }

public class Recipient
    {
        public int Id { get; set; }
        public string CallId { get; set; }
    }

public class RecipientModel
    {
        public int Id { get; set; }
        public string CallId { get; set; }
    }


    private static void ConfigureAlertMapping()
    {
        AutoMapper.Mapper.Initialize(cfg =>
            cfg.CreateMap<Alert, AlertModel>()
                .ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.MessageSender))
        );
    }

    private static void ConfigureRecipientMapping()
    {
        AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Recipient, RecipientModel>());
    }

    private static void ConfigureSiteMapping()
    {
        AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Site, SiteModel>());
    }
公共类警报
{
公共字符串MessageSender{get;set;}
公共站点站点{get;set;}
公共IEnumerable收件人{get;set;}
}
公共类警报模型
{
公共字符串发送方{get;set;}
公共站点模型站点{get;set;}
公共IEnumerable收件人{get;set;}
}
公共类网站
{
公共int Id{get;set;}
}
公共类站点模型
{
公共int Id{get;set;}
}
公共类收件人
{
公共int Id{get;set;}
公共字符串CallId{get;set;}
}
公共类接受者模型
{
公共int Id{get;set;}
公共字符串CallId{get;set;}
}
私有静态void ConfigureAlertMapping()
{
AutoMapper.Mapper.Initialize(cfg=>
cfg.CreateMap()
.ForMember(dest=>dest.Sender,opt=>opt.MapFrom(src=>src.MessageSender))
);
}
私有静态void ConfigureRecipientMapping()
{
初始化(cfg=>cfg.CreateMap());
}
私有静态void ConfigureSiteMapping()
{
初始化(cfg=>cfg.CreateMap());
}
这就是我要映射的对象

Alert alert = new Alert()
        {
            Site = new Site() { Id = 1 },
            Recipients = new List<Recipient> { new Recipient() { CallId = "1001" } }
        };
警报警报=新警报() { Site=newsite(){Id=1}, 收件人=新列表{new Recipient(){CallId=“1001”} }; 我想调用此函数,但引发异常…:(

AlertModel-alertOutputInfo=AutoMapper.Mapper.Map(警报);
这是错误:

>>Mapping types:
Alert -> AlertModel
UniteAlerter.Domain.Models.Alert -> UniteAlerter.Gateway.Models.AlertModel
   at lambda_method(Closure , Alert , AlertModel , ResolutionContext )
   at AutoMapper.Mapper.AutoMapper.IMapper.Map[TSource,TDestination](TSource source)
   at AutoMapper.Mapper.Map[TSource,TDestination](TSource source)
   at UniteAlerter.Gateway.AlertGateway.<SendAlert>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
映射类型: 警报->警报模型 UniteAlerter.Domain.Models.Alert->UniteAlerter.Gateway.Models.AlertModel at lambda_方法(关闭、警报、警报模型、ResolutionContext) 在AutoMapper.Mapper.AutoMapper.IMapper.Map[TSource,TDestination](TSource source) 在AutoMapper.Mapper.Map[TSource,TDestination](TSource-source) 在UniteAlerter.Gateway.AlertGateway.d_u1.MoveNext()上 ---来自引发异常的上一个位置的堆栈结束跟踪--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中 如果您将找到其他解决方案,请将其添加到此处。

更新(解决方案)

我发现了问题…我为我想要映射的每个类初始化映射器,但解决方案是用所有映射一次性初始化映射器

AutoMapper.Mapper.Initialize(
cfg =>
     {
        cfg.CreateMap<Alert, AlertModel>().ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.MessageSender));
        cfg.CreateMap<Recipient, RecipientModel>();
        cfg.CreateMap<Site, SiteModel>();
      }
);
AutoMapper.Mapper.Initialize(
cfg=>
{
CreateMap().formMember(dest=>dest.Sender,opt=>opt.MapFrom(src=>src.MessageSender));
CreateMap();
CreateMap();
}
);
更新(解决方案)

我发现了问题…我为我想要映射的每个类初始化映射器,但解决方案是用所有映射一次性初始化映射器

AutoMapper.Mapper.Initialize(
cfg =>
     {
        cfg.CreateMap<Alert, AlertModel>().ForMember(dest => dest.Sender, opt => opt.MapFrom(src => src.MessageSender));
        cfg.CreateMap<Recipient, RecipientModel>();
        cfg.CreateMap<Site, SiteModel>();
      }
);
AutoMapper.Mapper.Initialize(
cfg=>
{
CreateMap().formMember(dest=>dest.Sender,opt=>opt.MapFrom(src=>src.MessageSender));
CreateMap();
CreateMap();
}
);

您也可以提供映射配置吗当然,您需要向下滚动第一个代码注释(最后3个方法)。我在一个名为Configure的函数中调用这些方法,该函数在Startup->ConfigureServices(IServiceCollection services)中调用您应该将您的解决方案添加为答案,然后将其设置为可接受的答案。您也可以提供映射配置吗?当然,您需要向下滚动第一个代码注释(最后3个方法)。我在名为Configure的方法中调用这些方法,该方法在Startup->ConfigureServices(IServiceCollection服务)中调用您应该将您的解决方案添加为答案,然后将其设置为接受答案