automapper - 自动映射动态对象,忽略属性名称的大小写
问题描述
如何配置映射器以使其正常工作?
(即动态对象的属性应该映射到具有相同字母的类定义的属性 - 忽略大小写)
public class Foo {
public int Bar { get; set; }
public int Baz { get; set; }
}
dynamic fooDyn = new MyDynamicObject();
fooDyn.baR = 5;
fooDyn.bAz = 6;
Mapper.Initialize(cfg => {});
Foo result = Mapper.Map<Foo>(fooDyn);
result.Bar.ShouldEqual(5);
result.Baz.ShouldEqual(6);
解决方案
如果您的动态对象实现IDictionary<string,object>
(例如ExpandoObject
),那么以下应该可以工作。必须有一些更简单的方法来做到这一点,因为即使情况不同,匿名对象也可以很好地映射。
Mapper.Initialize(cfg =>
{
cfg.CreateMap<IDictionary<string, object>, Foo>()
.ConstructUsing(d =>
{
Foo foo = new Foo();
foreach (System.Reflection.PropertyInfo prop in typeof(Foo).GetProperties())
{
foreach (KeyValuePair<string, object> entry in d)
{
if (entry.Key.ToLowerInvariant() == prop.Name.ToLowerInvariant())
{
prop.SetValue(foo, entry.Value);
break;
}
}
}
return foo;
});
});
推荐阅读
- linear-regression - 标称属性“标签编码为 1、2、3”我可以直接用于没有假人的随机森林算法
- javascript - 将 *.gql 文件中的 2 个查询合并为 1 个查询
- node.js - 使用移动应用程序或二维码进行用户认证/授权
- reactjs - 向 React JS 项目添加动态状态
- mysql - 如何在 MySQL 数据库中获取每日数据
- firebase - ':firebase_core:compileDebugJavaWithJavac'
- android - 如何使用改造发送带有多部分文件的请求参数?
- menu - Typo3 - 将类添加到打字稿 hmenu 中的禁用页面
- jquery - 显示来自 Ajax 响应的图像
- amazon-web-services - 使用 amazon chime sdk 实时跟踪用户状态