将派生类映射到基类时,ModelMapper 返回源对象类型

朱鲁

假设我有课:

public class A {
  public String x;
  public String y;
}

public class B extends A {
  public String z;
}

我有一个B被调用的实例,b并且想要映射到A(以摆脱z属性,因为它稍后会被序列化)。我试图做;

new ModelMapper().map(b, A.class)

但结果我得到了相同类型的B对象。我怀疑这可能是因为B是A的子类,所以转换类型没有意义,因为B满足A,但这只是我的怀疑。

我可以以某种方式告诉 ModelMapper 将类型转换为我想要的类型吗?也许有更好的方法来做到这一点?

斯林德瑙

您可以使用自定义来执行此操作TypeMap

考虑以下示例代码:

B b = new B();
A a = new ModelMapper().map(b, A.class);
System.out.println("Converted to A? = " + a);
System.out.println("Still instance of B? " + (a instanceof B));

ModelMapper modelMapper = new ModelMapper();
// Creates a base TypeMap with explicit mappings
modelMapper.createTypeMap(B.class, A.class);
A a2 = modelMapper.map(b, A.class);
System.out.println("Converted with TypeMap to A? = " + a2);
System.out.println("Still instance of B? " + (a2 instanceof B));

带输出:

Converted to A? = tests.so.modelmapper.B@d3bd8b
Still instance of B? true

Converted with TypeMap to A? = tests.so.modelmapper.A@56dfcb
Still instance of B? false

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AutoMapper将派生类映射到基本类型集合的属性

当参数类型为基类时将派生类传递给方法

将派生类分配给返回基类的函数的输出时出错

无法将派生类对象添加到其基类类型的列表中

为什么GetType()在将派生类显式转换为基类后返回派生类?

用户定义的转换是否将派生类类型转换为基类类型?

动态将派生类类型转换为基类C#

将派生类对象添加到基类的 vector<unique_ptr>

在基类和派生类上进行操作时,如何返回派生类型?

从基类方法返回派生类型

引用派生类时基类的对象大小

在C ++中将派生类对象传递给具有基类参数的函数时,为什么要传递引用而不是值?

创建基类指针的向量,并将派生类对象传递给它(多态性)

如何使用函数(而非构造函数)将派生类对象分配给基类指针

返回派生类作为基类

从派生类创建基类对象

对派生类对象的基类引用

返回派生类类型的基类中的方法?

使用auto从基类与派生类的返回类型冲突

基类方法可以返回派生类的类型吗?

在派生类中更改基类方法的返回类型

从基类和派生类之外的方法返回任何派生类类型

抽象类映射派生类型

为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

AutoMapper-将派生类映射到Dto

通过基类将派生对象存储在向量中,并在删除后将其返回给派生对象

返回派生类型的基类中的C#方法

在列表中添加相同基类的两个派生类时发生类型错误

C#-从派生类调用基类方法时的类型转换问题