Akka 有没有一种方法可以根据编解码器的类访问编解码器

Akka 有没有一种方法可以根据编解码器的类访问编解码器,akka,akka-cluster,circe,Akka,Akka Cluster,Circe,我希望使用circe实现一个akka序列化程序。假设我已经定义了需要与其编解码器一起序列化的类,因此: @JsonCodec sealed trait Command extends JsonSerializable case class Activate() extends Command case class DeActivate() extends Command object Command 以及要序列化的类: abstract class CirceSerializer(table:

我希望使用circe实现一个akka序列化程序。假设我已经定义了需要与其编解码器一起序列化的类,因此:

@JsonCodec sealed trait Command extends JsonSerializable
case class Activate() extends Command
case class DeActivate() extends Command
object Command
以及要序列化的类:

abstract class CirceSerializer(table: Map[Class[_], Codec[_]]) extends Serializer {

  def includeManifest: Boolean = true
  def identifier = 3456789

  def toBinary(obj: AnyRef): Array[Byte] = {
    table.get(obj.getClass) match {
        case Some(codec) =>
            codec.asInstanceOf[Codec[AnyRef]](obj).asString.get.getBytes(StandardCharsets.UTF_8)
        case None =>
            throw new RuntimeException("No codec defined for object: " + obj)
    }
  }

  def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]]): AnyRef = clazz match {
    case Some(cls) =>
        fullTable.get(cls) match {
            case Some(codec) =>
                val str = new String(bytes, StandardCharsets.UTF_8)
                codec.decodeJson(Json.fromString(str))
            case None =>
                throw new RuntimeException("No codec defined for class: " + cls)
        }
    case None =>
        throw new RuntimeException("Specified includeManifest but it was never passed")
  }
}
但是我必须为每个需要序列化的类显式地传递一个编解码器:

class MyCirceSerilaizer extends CirceSerializer(Map(
  classOf[Activate] -> deriveCodec[Activate],
  classOf[DeActivate] deriveCodec[DeActivate])) {

}
是否有一种更通用的方法可以避免显式映射每个类