Automapper复杂类型映射异常

2023-12-08

我正在尝试为新模块实现 AutoMapper。

我在网站上有 MVC 模型,我正在研究它,它看起来像这样:

public class MvcModel
{
    public Params Params { get; set; }
    public Steps Steps { get; set; }
}    
public class Params
{
    public int? RequestId { get; set; } 
    public bool NewClient { get; set; }
}    
public class Steps
{
    public Step1 Step1 { get; set; }    
    public Step2 Step2 { get; set; }    
    public Step3 Step3 { get; set; }    
}    
public class Step1
{
    public int Name { get; set; }   
}    
public class Step2
{
    public int Phone { get; set; }  
}    
public class Step3
{
    public int Email { get; set; }  
}

另一方面,我有下一堂课,我必须将其传递给某些服务:

public class Request
{
    public Parameters Parameters { get; set; }
    public RequestContent RequestContent { get; set; }
}

public class Parameters
{
    public int NewClient { get; set; }
}

public class RequestContent
{
    public int Id { get; set; } 
    public int InnerId { get; set; }
    public string Session { get; set; }
    public string Clerk { get; set; }
    public bool Private { get; set; }

    public PersonalDetails PersonalDetails { get; set; }    
    public Phones Phones { get; set; }  
    public ElectonicCommunication ElectonicCommunication { get; set; }  
}

public class PersonalDetails
{
    public int Name { get; set; }   
}

public class Phones
{
    public int Phone { get; set; }  
}

public class ElectonicCommunication
{
    public int Email { get; set; }  
}

我创建了一个新的 AutoMapper 配置类(从 Global.asax 调用):

public class AutoMapperConfig
{
    public static void Configure()
    {
        MapperConfiguration MapperConfiguration = new MapperConfiguration(cfg => {
            cfg.AddProfile<Out>();
            cfg.AddProfile<In>();
            cfg.CreateMap<MvcModel, Request>();
        });
        MapperConfiguration.AssertConfigurationIsValid();
    }
}

public class Out: Profile
{
    protected override void Configure()
    {
        CreateMap<MvcModel, Request>()
            .ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => src.Params))
            .ForMember(dest => dest.RequestContent, opt => opt.MapFrom(src => src.Steps));
    }
}

public class In: Profile
{
    protected override void Configure()
    {
        CreateMap<Request, MvcModel>()
            .ForMember(dest => dest.Params, opt => opt.MapFrom(src => src.Parameters))
            .ForMember(dest => dest.Steps, opt => opt.MapFrom(src => src.RequestContent));
    }
}

这些在原理上是相似的,尽管真实的物体更大一些并且有不同的名称。

期望: MvcModel要映射到Request和向后。

更准确地说:

  1. MvcModel.Params要映射到Request.Parameters和向后
  2. MvcModel.Steps要映射到Request.RequestContent和向后
  3. InnerId, Session, Clerk, Private from Request.RequestContent必须被忽略

问题:应用程序启动时出现错误:

无法映射 ... 上的以下属性:
添加自定义映射表达式、忽略、添加自定义解析器或修改 目的地类型... 语境: 映射到属性...从...到... 从类型...映射到... 从源类型 AutoMapperMessageBugTests.SourceChild 映射到类型 引发了“AutoMapper.AutoMapperConfigurationException”类型的异常。

我没有找到关于如何在应用程序中全局使用 AutoMapper 的良好文档,并且无法弄清楚如何正确使用它以及我到底做错了什么。

我找不到复杂对象映射以太的好例子......

有人可以帮我弄这个吗?


谢谢stuartd现在可以了!

我不明白的是,我必须从下到上映射!所有子对象都必须先映射,因此在映射父对象时它们就会被识别!

现在个人资料看起来像这样:

public class Out: Profile
{
   protected override void Configure()
    {
        CreateMap<Step1, PersonalDetails>();
        CreateMap<Step2, Phones>();
        CreateMap<Step3, ElectonicCommunication>();

        CreateMap<Params, Parameters>();
        CreateMap<Params, RequestContent>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.RequestId))
            .ForAllMembers(opt => opt.Ignore());
        CreateMap<Steps, RequestContent>()
            .ForMember(dest => dest.PersonalDetails, opt => opt.MapFrom(src => src.Step1))
            .ForMember(dest => dest.Phones, opt => opt.MapFrom(src => src.Step2))
            .ForMember(dest => dest.ElectonicCommunication, opt => opt.MapFrom(src => src.Step3))
            .ForAllMembers(opt => opt.Ignore());

        CreateMap<MvcModel, Request>()
            .ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => src.Params))
            .ForMember(dest => dest.RequestContent, opt => opt.MapFrom(src => src.Steps));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Automapper复杂类型映射异常 的相关文章

  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • 从类外部调用某些异步方法时出现异常

    假设我有一个名为 x 和 y 的类 如下所示 class x public x p private async p await q private async p some logic is there 在 test aspx cs 文件中
  • 计算复杂数组的abs()值的最快方法

    我想计算 C 或 C 中复杂数组元素的绝对值 最简单的方法是 for int i 0 i lt N i b i cabs a i 但对于大向量来说 速度会很慢 有没有办法加快速度 例如使用并行化 语言可以是 C 或 C 鉴于所有循环迭代都是
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • std::tr1::function 和 std::tr1::bind

    我在使用时遇到问题veryC 类中的复杂 C 函数 重写 C 函数是not一个选项 C函数 typedef void integrand unsigned ndim const double x void fdata unsigned fd
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • boost::asio::io_service 是否保留处理程序的顺序?

    Does boost asio io service http www boost org doc libs release doc html boost asio reference io service html保证处理程序的调用顺序与
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 为什么我不能从对中返回 unique_ptr?

    为什么我不能从对中返回 unique ptr include
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 类型别名和不完整类型

    我可能已经超出了解决这个本应简单的问题的范围 我在这里开始这个问题 在编译时获取基类的类型 https stackoverflow com questions 17735852 getting type of a base class at
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • 如何在asp.net core 6中注入IConfiguration

    web api 应用程序中不再有 Startup cs 我们以前可以注入IConfiguration进入那个Startup class public class Startup public Startup IConfiguration c
  • 将 System.Array 从 .Net 编组到 vb6

    我有一个 Net 组件 它有一个 COM 可见类 该类具有返回 System Array 的方法 它实际上返回一个字符串数组 但返回类型声明为 System Array 不要问我 为什么 我知道我可以将返回类型声明为 string 这样就可
  • 使用非字符串作为字符串(而不是自动使用 ToString)时如何显示错误?

    建议的重复确实是一个类似的问题 然而 答案只涵盖一种选择 禁用 ToString 本身 还有其他可能的解决方案 例如让 Visual Studio 警告我 或者不调用 ToString 仔细阅读那里的答案 他认为is调用 只是解释说没有办法
  • Gridview 错误:对 Bind 的调用格式不正确

    我有以下 gridview 代码
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中
  • 如何使用完全空的类型使 Activator.CreateInstance 运行速度减慢约 20 倍

    Given NET 程序集命名expression host NET 程序集命名CreateInstanceTest CreateInstanceTest 在其配置文件中启用 NetFx40 LegacySecurityPolicy exp

随机推荐

  • 如何处理php中eval函数的解析错误

    我正在尝试使用 php 的 eval 函数 但我一直在处理解析错误 就像考虑我是否有 1 或 1 这样的边缘情况 如果给我解析错误 语法错误 有人知道如何处理语法错误或如何绕过错误消息 我想给出更好的错误消息 是否可以将错误消息存储到变量中
  • 将Python venv移动到另一台没有互联网的机器上

    我正在尝试将 Python 项目部署到没有互联网的机器上 因为它没有互联网 所以我无法使用 pip 安装任何软件包requirements txt文件 我想知道是否可以将包含所有已安装软件包的现有环境移动到另一台预安装了所有软件包的计算机中
  • AVMutableComposition - 视频资源之间的空白/黑框

    我目前正在尝试使用 AVMutableComposition 将 5 个视频背靠背放置 如下所示 mixComposition insertTimeRange CMTimeRangeMake kCMTimeZero asset1 durat
  • 如何限制函数可以运行的时间(添加超时)?

    如何设置函数可以运行的最长时间限制 例如 使用time sleep作为占位符函数 如何限制时间量time sleep最多可以运行 5 分钟 300 秒 import time try As noted above time sleep is
  • 数组结构与结构数组

    从我在这里读到的一些评论来看 最好是Structure of Arrays SoA over Array of Structures AoS 用于像 CUDA 这样的并行实现 如果这是真的 有人能解释为什么吗 选择 AoS 与 SoA 以获
  • 如何在iPhone中将QTVR图像旋转360度?

    我想开发一款基于 iPhone 的应用程序 其中我想将一张图像 类型 QTVR 旋转 360 度 所以 我可以得到与谷歌地图中的街景相同的行为 如果有人这样做了 请在此处分享代码片段或任何相关文章的任何有用的网址 然后请将其粘贴在回复中 非
  • 'static' 关键字在类中起什么作用?

    具体来说 我正在尝试这段代码 package hello public class Hello Clock clock new Clock public static void main String args clock sayTime
  • 当输入值可以是不同格式时,如何在 R 中将日期转换为格式“yyyy-mm-dd”

    我可以接收日期可以采用以下两种格式之一的文件 mm dd yyyy 或 yyyy mm dd 它们是首先要考虑的因素 无论我收到的日期格式如何 我都希望能够将它们转换为 yyyy mm dd 格式的 日期 数据类型 我尝试过使用 df 1
  • 比较 Array 扩展中的对象导致 Swift 中的错误

    我正在尝试构建一个扩展 将 NSArray NSMutableArray 的一些便利功能添加到 Swift Array 类中 并且我正在尝试添加此功能 func indexOfObject object AnyObject gt Int i
  • 您可以为 JFrame 内的 JPanel 设置永久大小吗?

    我当前的问题是我有一个带有 2x2 GridLayout 的 JFrame 在其中一个正方形内 我有一个用于显示网格的 JPanel 我正在与 java swing 库一起度过愉快的一天 看看 Image Java 会自动扩展每个 JLab
  • 在 bash 脚本中创建which命令

    对于作业 我应该创建一个名为my which sh这将 做与 Unix 命令相同的事情 但使用 for 循环而不是 if 我也不允许在我的脚本中调用它 我对此是全新的 并且一直在阅读教程 但我对如何开始感到非常困惑 没有which只列出命令
  • Android 通知与 DecoratedCustomViewStyle

    我正在尝试使用自定义布局在 Android 7 上创建通知 但我想使用 v7 支持库中的 DecoratedCustomView 样式 https developer android com reference android suppor
  • iPhone OCUnit,异常退出,代码为 139,这是什么?

    iPhone SDK 3 1 2 Xcode 3 1 4 Mac OS X 10 5 8 我是使用 iphone sdk 附带的 OCUnit 的新手 我得到的唯一错误是 错误 测试装备 Developer Platforms iPhone
  • 处理 nginx 400“普通 HTTP 请求已发送到 HTTPS 端口”错误

    我正在 Passenger nginx 后面运行一个 Sinatra 应用程序 我试图让它响应 http 和 https 调用 问题是 当两者都在服务器块中定义时 https 调用会正常响应 但 http 会产生 400 普通 HTTP 请
  • 列表属性的空集合初始值设定项会导致 null

    When I 运行这段代码 它不初始化ThisIsAList正如我所期待的那样 到一个空集合 而不是ThisIsAList为空 void Main var thing new Thing ThisIsAList Console WriteL
  • Pandas 过滤串联的多个子字符串

    我需要过滤 a 中的行pandas数据帧 以便特定字符串列至少包含所提供的子字符串列表之一 子字符串可能包含不寻常 正则表达式字符 比较不应涉及正则表达式并且不区分大小写 例如 lst kdSj af aBC dsfa sdKaJg dks
  • 添加“代码”按钮到WordPresstinyMCE

    我一直在关注这个教程 很多人都喜欢它 http codex wordpress org TinyMCE Custom Buttons function myplugin addbuttons Don t bother doing this
  • 如何在 MVC 中使用 LabelFor 插入换行符

    我的模型中有 Display Name Check to enter
  • 内联 SVG 的重复(过滤器)ID

    创建带有滤镜的内联 SVG 时 我必须为滤镜定义一个 ID 当我自动生成几个略有差异的内联SVG时 第一个图像的过滤器优先 覆盖 后续图像的过滤器 因为重复过滤器 ID 现场演示 更清晰 http jsfiddle net 9wqgS p
  • Automapper复杂类型映射异常

    我正在尝试为新模块实现 AutoMapper 我在网站上有 MVC 模型 我正在研究它 它看起来像这样 public class MvcModel public Params Params get set public Steps Step