使用 AutoMapper 映射字典

2024-02-17

鉴于这些类,我如何映射它们的字典?

public class TestClass
{
    public string Name { get; set; }
}

public class TestClassDto
{
    public string Name { get; set; }
}


Mapper.CreateMap<TestClass, TestClassDto>();
Mapper.CreateMap<Dictionary<string, TestClass>, 
                  Dictionary<string, TestClassDto>>();

var testDict = new Dictionary<string, TestClass>();
var testValue = new TestClass() {Name = "value1"};
testDict.Add("key1", testValue);

var mappedValue = Mapper.Map<TestClass, TestClassDto>(testValue);

var mappedDict = Mapper.Map<Dictionary<string, TestClass>, 
                            Dictionary<string, TestClassDto>>(testDict);

映射其中之一(本例中为mappedValue)效果很好。

映射它们的字典最终导致目标对象中没有任何条目。

我究竟做错了什么?


您遇到的问题是因为 AutoMapper 正在努力映射contents词典的。你必须思考它是存储什么的 - 在这种情况下键值对.

如果您尝试为 KeyValuePair 组合创建映射器,您很快就会发现您不能直接作为Key 属性没有 setter.

AutoMapper 通过允许您使用构造函数来映射来解决这个问题。

/* Create the map for the base object - be explicit for good readability */
Mapper.CreateMap<TestClass, TestClassDto>()
      .ForMember( x => x.Name, o => o.MapFrom( y => y.Name ) );

/* Create the map using construct using rather than ForMember */
Mapper.CreateMap<KeyValuePair<string, TestClass>, KeyValuePair<string, TestClassDto>>()
      .ConstructUsing( x => new KeyValuePair<string, TestClassDto>( x.Key, 
                                                                    x.Value.MapTo<TestClassDto>() ) );

var testDict = new Dictionary<string, TestClass>();
var testValue = new TestClass()
{
    Name = "value1"
};
testDict.Add( "key1", testValue );

/* Mapped Dict will have your new KeyValuePair in there */
var mappedDict = Mapper.Map<Dictionary<string, TestClass>,
Dictionary<string, TestClassDto>>( testDict );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AutoMapper 映射字典 的相关文章

随机推荐

  • 无效 URI - 如何防止 URI::InvalidURIError 错误?

    我从delayed job 得到以下信息 Worker XXXXXX pid 3720 Class XXXXXXX failed with URI InvalidURIError bad URI is not URI https s3 am
  • 如何在 Angular 2 中重新加载分页页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何重新加载 Angular 2 上的当前页面 如果 iam 在第 2 页 分页 并刷新页面 它将显示第 1 页 URL 页面加载 但我想刷
  • 如何使用 Spring JDBC 模板批处理在数据库中进行多次插入?

    我需要一次性在数据库中插入数千条记录 我在我的应用程序中使用 spring JDBC 模板 下面是我到目前为止编写的代码 它一次执行所有插入 因此 如果我有 10 000 个用户 他们就会一次性插入 但我想要的是批量执行它们 例如一批执行
  • Webclient:java.lang.OutOfMemoryError:直接缓冲内存

    我在 Web 客户端收到 java lang OutOfMemoryError Direct buffer memory 错误 批处理作业每天运行 两次失败 第三次就通过了 at org springframework retry supp
  • 按日期范围查询 dynamoDB

    我正在开发一个允许用户读书的应用程序 我正在使用 DynamoDB 来存储用户阅读的书籍的详细信息 并且我计划使用 DynamoDB 中存储的数据来计算统计数据 例如趋势书籍 作者等 我当前的架构如下所示 user id timestamp
  • Rails:如何让 Jquery 在单击后更新数据库列

    首先 我知道我正在尝试做的事情对于 Rails 来说并不典型 我愿意接受更好的替代方案的建议 我是 Rails 新手 所以欢迎提出建议 基本上 我有一个包含 5 个通知的通知栏 用户单击并看到通知后 我想将数据库中名为 saw 的列设置为
  • 片段和片段活动本质上比活动更快吗?

    片段和片段活动本质上比活动更快吗 如果我不需要在片段中加载我的活动 我应该使用 FragmentActivities 和 Fragments over Activity 吗 我问这个问题的原因是因为我多年来一直专门使用 Activity 而
  • Java 8 可选和 flatMap - 有什么问题?

    一些代码 public class Player Team team String name public class Team List
  • TDD 如何处理模拟对象中的更改

    在编写单元测试时 对于单元与之交互的每个对象 我正在采取这些步骤 从我对 JBrains 的理解中窃取 集成测试是一个骗局 http www infoq com presentations integration tests scam 在单
  • Grunt cssmin / CleanCSS 源映射变基

    我使用 cssmin 和以下 内容 文件夹结构 src dir1 style1 css images image1 png dir2 style2 css images image2 png dist styles min css styl
  • Chrome 不显示网站图标

    我无法显示该网站的图标http www lowcoupling com http www lowcoupling com在铬上 我已经用 Safari 检查过 图标显示正确 我应该如何修复它 UPDATE 这是我的 css 的第一部分
  • 用于执行外部 MSBuild 文件的 MSBuild 任务

    我正在尝试设置一个 MSBuild 文件 该文件将调用另一个 MSBuild 文件 我想知道实现此目的的最佳方法是什么 我们在构建服务器下载 MSBuild 文件的情况下使用它 然后根据参数执行相应的第二个文件 我知道我可以使用
  • 针对 Windows Phone ARM 目标的 Clang 交叉编译

    我想使用 Clang 为 Windows Phone ARM 目标编译一个用 C 编写的程序 有人有这方面的经验吗 什么是更好的方法 1 使用 Clang for Windows 和 MinGW 在运行 Windows 8 的主机上构建 C
  • 确定分发这些优惠券的最佳方式的算法是什么?

    这是我的问题 假设我要购买 3 种不同的商品 并且我最多有 5 张优惠券 优惠券可以互换 但用于不同商品时价值不同 以下矩阵给出了在不同商品上花费不同数量的优惠券的结果 coupons 1 2 3 4 5 item 1 10 off 15
  • Flutter Google 地图无法确定设备的当前位置

    我使用 Flutter 的 Geolocator 和 Google Maps 包来确定设备的位置 我利用圆形进度条来等待确定当前位置 一旦确定 Google 地图就会加载已识别的设备位置 当应用程序加载时 会显示圆形进度条 但尽管显示并接受
  • Symfony + Doctrine - 定义完整性约束错误时的错误消息

    当我尝试删除项目时出现完整性约束错误时 我试图显示一条不错的错误消息 我只想显示如下消息 而不是出现错误 500 您无法删除此内容 因为某些项目已链接到它 我已经搜索了一段时间 但我总是找到 如何解决此错误 的解决方案 我不想解决它 我只是
  • 跟踪表中的更改

    我的同事向我提出了一个我无法回答的问题 由于缺乏经验 该问题与跟踪表上相关字段的更改有关 假设我们有 3 个表 每个表有 20 个字段 让我们考虑一下这个示例 其中每个表都有 2 个字段 一个名为 LastUpdatedOn 另一个名为 L
  • 如何在字符串中存储颜色?

    如果颜色是人类可读格式 我想将颜色存储在字符串中 如果不是 则将其存储在 ToArgb 中 颜色是红色 然后将其存储在 Red 字符串中 如果颜色是绿色的某种变体 则将其存储为 ff40ff80 在运行时我想将此字符串转换回 Color 类
  • Rails 路由 - 如何将范围参数添加到 url_for 帮助器?

    我有资源生物 在视图和添加新生物的链接中是 link to Add new bio new admin bio 如果我将资源 bio放入这样的范围 namespace admin do scope bio type defaults gt
  • 使用 AutoMapper 映射字典

    鉴于这些类 我如何映射它们的字典 public class TestClass public string Name get set public class TestClassDto public string Name get set