C# automapper 嵌套对象条件映射

Posted

技术标签:

【中文标题】C# automapper 嵌套对象条件映射【英文标题】:C# automapper nested object conditional map 【发布时间】:2022-01-06 02:57:23 【问题描述】:

我正在使用具有最新自动映射器版本的 .Net Core,我对嵌套对象有疑问。

我有一个像下面这样的视图模型(这是我无法更改为第 3 方的):

public class MyTempA
 
    string ShapeName;
    object ShapeDetails;
    //....some other props

我有下面的 db 类和视图模型

    方形(数据库实体) SquareViewModel 金字塔(数据库实体) 金字塔视图模型 圆柱体(数据库实体) 圆柱视图模型

我已经为上述数据库实体提供了单独的映射器来查看模型。

我的问题: MyTempA 中的 ShapeDetails 对象可以是任何基于 ShapeName 的视图模型。如何使用 Automapper 进行映射?

如果 ShapeName 是 Square,ShapeDetails 应该是 SquareViewModel(映射自 Square db 类)。

谢谢

【问题讨论】:

【参考方案1】:

您可以使用两个选项:

如果你的类有基类,第一个是使用 AutoMapper 提供的映射继承特性。

https://docs.automapper.org/en/stable/Mapping-inheritance.html

作为第二种选择,您可以编写自定义值解析器:

https://docs.automapper.org/en/stable/Custom-value-resolvers.html

【讨论】:

非常感谢。我没有基类,所以我必须通过第二个选项。我正在浏览有关自定义值解析器的文章,但它们仅显示静态属性(如 int、decimal ...),我没有看到返回的映射器/ViewModel。你有任何示例链接吗? 这是一个简单的基本示例:gist.github.com/NQuirmbach/df606e2b32cedfd3e3f847a4bf81769e

以上是关于C# automapper 嵌套对象条件映射的主要内容,如果未能解决你的问题,请参考以下文章

Automapper 链/嵌套对象映射抛出异常

C#AutoMapper 使用手册

用于封装的 AutoMapper 和嵌套对象映射

AutoMapper C#实体映射

如何使用 AutoMapper 使用 EntityFramework 使用嵌套列表更新对象?

C# 高性能对象映射(表达式树实现)