Dubbo中Map类型默认的序列化和反序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo中Map类型默认的序列化和反序列化相关的知识,希望对你有一定的参考价值。

参考技术A 序列化:
默认使用的hessian序列化中对Map的序列化使用com.alibaba.com.caucho.hessian.io.MapSerializer.
大致逻辑就是除了把map对象的key-value键值对序列化进去,默认还会将class也序列化进去。

反序列化:
默认使用的hessian序列化中对Map的反序列化使用com.alibaba.com.caucho.hessian.io.MapDeserializer.
大致分一下两段逻辑:
构造方法中的逻辑:class类型存在无参构造方法时,直接使用对应的构造方法,否则使用HashMap的无参构造器。

反序列化逻辑:类型为null或为Map的,直接只用HashMap。类型为SortedMap的,使用TreeMap,否则使用上一步中构造器去new一个实例。然后将键值对反序列化后put到创建的map实例中

总结:
1. 所以在返回类型中使用一些没有无参构造器的类作为成员变量或返回值时,实际创建的对象是HashMap,那么就可能会出现赋值时的类型不匹配的错误。
比如:

直接dubbo调用时,就会出现以下这种错误:

以上是关于Dubbo中Map类型默认的序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章

fastjson:对key为非String类型的Map的序列化和反序列化问题

Dubbo序列化原理

dubbo传输的对象必须序列化

序列化和反序列化

自定义SpringBoot对于LocalDate/LocalDateTime/LocalTime类型序列化和反序列化的几种方式

自定义SpringBoot对于LocalDate/LocalDateTime/LocalTime类型序列化和反序列化的几种方式