使用Automapper

时间:2018-08-02 18:27:33

标签: c# .net automapper

我在运行时收到的错误消息是:

找到未映射的成员。在下面查看类型和成员。 添加自定义映射表达式,忽略,添加自定义解析器或修改源/目标类型

对于没有匹配的构造函数,请添加一个无参数ctor,添加可选参数,或映射所有构造函数参数

列表'1-> MobileRoot(目标成员列表) System.Collections.Generic.List'1 [[Strata.CS.Jazz.Biz.Dashboard.MobileInfo,Strata.CS.Jazz.Biz,Version = 2019.10.0.0,Culture = neutral,PublicKeyToken = null]]-> Strata。 Jazz.Web.Controllers.MobileController + MobileRoot(目标成员列表)

未映射的属性: 用户


从错误消息中我可以看出,AutoMapper需要知道如何处理在MobileRoot中创建的ForMember用户,然后将其传播给链上的每个后续列表。谁能告诉我如何使用AutoMapper有效地做到这一点?我知道如何使用GroupBy和Select通过Linq做到这一点,所以我认为这应该可以通过AutoMapper做到。


我的查询返回此类:

public class MobileInfo
{
    public string NameFull { get; set; }
    public string EmailAddress { get; set; }
    public string SolutionName { get; set; }
    public int SortOrder { get; set; }
    public string Name { get; set; }
    public bool IsLegacy { get; set; }
    public string Description { get; set; }
    public string WidgetName { get; set; }
    public int Row { get; set; }
    public int Col { get; set; }
    public int Height { get; set; }
    public int Width { get; set; }
    public string WidgetClassName { get; set; }
    public string  Data { get; set; }
}

我想将Automapper与配置文件一起使用,以使其返回以下内容:

    internal class MobileRoot
    {
        public IEnumerable<MobileUser> Users { get; set; }
    }

    internal class MobileUser
    {
        public string NameFull { get; set; }
        public string EmailAddress { get; set; }
        public IEnumerable<MobileSolution> Solutions { get; set; }
    }

    internal class MobileSolution
    {
        public string Solution { get; set; } // MobileInfo.SolutionName
        public int SortOrder { get; set; }
        public IEnumerable<MobileDashboard> Dashboards { get; set; }
    }

    internal class MobileDashboard
    {
        public string Dashboard { get; set; } // MobileInfo.Name
        public bool IsLegacy { get; set; }
        public string Description { get; set; }
        public IEnumerable<MobileWidget> Widgets { get; set; }
    }

    internal class MobileWidget
    {
        public string Widget { get; set; } // MobileInfo.WidgetName
        public int Row { get; set; }
        public int Col { get; set; }
        public int Height { get; set; }
        public int Width { get; set; }
        public string WidgetClassName { get; set; }
        public string Data { get; set; }
    }

到目前为止,我定义的配置文件是:

    public class ProfileMobileRoot : Profile
    {
        public ProfileMobileRoot()
        {
            CreateMap<MobileInfo, MobileRoot>();
        }
    }

    public class ProfileMobileUser : Profile
    {
        public ProfileMobileUser()
        {
            CreateMap<MobileInfo, MobileUser>();
        }
    }

    public class ProfileMobileSolution : Profile
    {
        public ProfileMobileSolution()
        {
            CreateMap<MobileInfo, MobileSolution>();
        }
    }

    public class ProfileMobileDashboard : Profile
    {
        public ProfileMobileDashboard()
        {
            CreateMap<MobileInfo, MobileRoot>();
        }
    }

    public class ProfileMobileWidget : Profile
    {
        public ProfileMobileWidget()
        {
            CreateMap<MobileInfo, MobileWidget>();
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作。太晚了,所以我的解决方案不是很复杂...但是可以用;)

C