如何将对象中的字段动态映射到另一个对象

本文关键字:映射 动态 一个对象 字段 对象 | 更新日期: 2023-09-27 18:36:16

我有 2 个对象,其属性如下:

对象 1:

  • 名字
  • 位置
  • 年龄
  • 地址

对象 2:

人规则

  • 人名
  • 人员位置
  • 人士

PersonRule 由 UI 驱动,该 UI 设置人员规则(也可以设置多个),用户说出规则中应包含的名称、位置、年龄。如果人员具有相同的属性值,则应将此规则与人员匹配。

我可以做一个简单的相等性检查,但是将来也有可能将新属性添加到人员规则中,例如 personaddress。然后,我需要通过考虑人员地址来检查规则是否与人员匹配。

有没有办法构建类似将 personrule 的所有属性与人员属性匹配的东西,这样当新属性添加到规则中时我就不需要进行更改?当然,这是假设相应的属性在 person 对象中可用。

谢谢-话筒

如何将对象中的字段动态映射到另一个对象

您可以使用可用的对象到对象映射器库之一,如 AutoMapper 或 EmitMapper。他们将负责将数据从 Person 实例复制到 PersonRule 实例,以便与另一个 PersonRule 实例进行比较。例如,使用 EmitMapper,您的代码可能如下所示:

var config = new DefaultMapConfig().MatchMembers((m1, m2) => "Person" + m1 == m2);
ObjectMapperManager.DefaultInstance
                   .GetMapper<Person, PersonRule>(config)
                   .Map(person, personRule);

您似乎正在寻找反射,请参阅此示例问题:

如何获取类的属性列表?