Symfony 错误:不支持json格式的序列化

Symfony 错误:不支持json格式的序列化,symfony,serialization,jsonencoder,symfony-messenger,Symfony,Serialization,Jsonencoder,Symfony Messenger,我已经集成了symfony messenger包,我正在尝试对该消息进行编码。 它在Symfony 3.4.4版本中工作。然而,在Symfony 3.4.28版本中给出了上述错误。 我在symfony serialzer组件中跟踪到,jsonEncoder似乎没有在serialzer.php中列出,这导致了这个问题 在symfony序列化程序组件中排除json编码器的原因是什么。 请参见以下DoctrineTransportSender: public function send(Envelop

我已经集成了symfony messenger包,我正在尝试对该消息进行编码。 它在Symfony 3.4.4版本中工作。然而,在Symfony 3.4.28版本中给出了上述错误。 我在symfony serialzer组件中跟踪到,jsonEncoder似乎没有在serialzer.php中列出,这导致了这个问题

在symfony序列化程序组件中排除json编码器的原因是什么。 请参见以下DoctrineTransportSender:

public function send(Envelope $envelope)
{
    $encodedMessage = $this->encoder->encode($envelope);
}

//messenger configuration:
messenger:
  transports:
    # DSN: doctrine://$repository_alias/$queue_name
    # most likely we do not need more repositories (unless there's a need for splitting MySQL table with messages)
    main: "doctrine://default/test"

  routing:
    # message type to transport routes
    Bundle\QueueBundle\Message\TestMessage: [ main ]

  serializer:
    enabled: true

默认情况下,Symfony Messenger切换到PHP的本机序列化/反序列化。使用php序列化可以防止出现问题,例如意外地忽略序列化的属性。它还将确保该组件可以在没有Symfony Serializer的情况下使用,这在Symfony 3.4中问题不大,但在Symfony 4和Flex中,或者在Symfony之外使用messenger时,您必须手动安装此依赖项,从而导致错误

您仍然可以使用Symfony序列化程序,但必须对其进行配置。考虑到您使用的是Symfony 3.4,您可能需要通过向TransportFactory提供适当的序列化程序实例来手动执行此操作,请参阅:

在Symfony 4中,您可以改用配置,请参见:

谢谢您的回复。
我通过添加自定义序列化程序而不是调用messenger序列化程序(包括编码和解码)解决了上述问题,它工作正常

感谢您的回复。我还观察到一件事,它适用于其他类型,即xml/csv。它只排除json编码器。由于我们已经在使用symfony 3.4.28中内置的第三方工具,我无法将其升级到4。所以我需要在这里重写序列化程序吗?因为Messenger组件序列化程序使用的是symfony的序列化程序。我使用的是与symfony 3.4.4相同的symfony Messenger捆绑包版本(即4.1.7)。因此它不应该改变它的行为。messenger本身应该使用3.4,但据我所知,FrameworkBundle集成不存在,这使得事情有点复杂。我假设您在某个地方手动配置了messenger。也许您可以将您的设置(为messenger和序列化程序配置的服务)添加到问题中?这会有帮助的。有问题的messenger更新配置我有点困惑,因为3.4版的FrameworkBundle中不应该提供此配置。您是否可以在cli中运行
composer show
,然后复制并粘贴它返回的symfony包?您是否也可以运行
bin/console debug:config framework messenger.serializer
,查看完整的序列化程序配置(包含默认值)返回什么?