繁体   English   中英

Map 复杂类型转匿名 object

[英]Map complex type to anonymous object

  • 让我们有众所周知的复杂类型(CT,例如示例中的Dto )。
  • 让我们有一组类型转换器(函数)将一种类型的值转换为另一种类型(例如int SubDto2ToInt(SubDto2 sub)string GuidToString(Guid gd) )。

有什么方法,怎么配置Automapper,告诉他:

“使用这些提供的类型转换器映射 CT 并创建匿名类型的 object。” ?

这将有效地:

  • go 覆盖所有 CT 的属性(递归)
  • 检查转换器列表
    • 如果存在给定属性类型的任何内容,则转换并添加到结果中
    • 否则继续默认方式(将其“按原样”放置到结果中)

当我预先创建匿名类型时,我取得了部分成功,但这没有多大意义,因为我可以创建“正常”目标类型并定义经典映射。 所以重点是让Automapper自己创建目标类型。 然后目标成员类型将由源类型或转换结果类型(如果已注册)驱动。

例子:

class SubDto1 { int M1; int M2; }  // Pretend they are get/set properties
class SubDto2 { int N1; int N2; }  // dtto
class Dto { SubDto1 Sub1; SubDto2 Sub2; Guid Id; } // dtto

var source = new Dto { Sub1 = new SubDto1 {M1 = 1, M2 = 2}, Sub2 = new SubDto2 {N1 = 10, N2 = 20}, Id = Guid.NewGuid()};
var expectedTargetEquivalentTo = new
{
    Sub1 = new {M1 = 1, M1 = 2},                 // No conversion registered here, "as is"
    Sub2 = 30,                                   // Fancy SubDto2 -> int conversion registered here
    Id = "00000000-0000-0000-0000-000000000000", // Guid -> string conversion registered here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM