symfony - JMSSerializerBundle 上的自定义处理程序被忽略

标签 symfony serialization handler jmsserializerbundle

我正在尝试为 JMS Serializer Bundle 使用自定义处理程序

class CustomHandler implements SubscribingHandlerInterface
{
    public static function getSubscribingMethods()
    {
        return array(
            array(
                'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
                'format' => 'json',
                'type' => 'integer',
                'method' => 'serializeIntToJson',
            ),
        );
    }

    public function serializeIntToJson(JsonSerializationVisitor $visitor, $int, array $type, Context $context)
    {
         die("GIVE ME SOMETHING");
    }
}

这什么都不做,也不会死。这就是我注册处理程序的方式
$serializer = SerializerBuilder::create()
    ->configureHandlers(function(HandlerRegistry $registry) {
        $registry->registerSubscribingHandler(new MyHandler());
    })
    ->addDefaultHandlers()
    ->build();

$json = $serializer->serialize($obj, 'json');

我的处理程序从未被调用,我无法操作序列化数据。

最佳答案

您需要为此处理程序创建服务:

custom_jms_handler:
    class: MyBundle\Serializer\CustomHandler
    tags:
        - { name: jms_serializer.subscribing_handler }

然后确保使用注册的 JMS 序列化服务
$json = $this->get('jms_serializer')->serialize($obj, 'json');

关于symfony - JMSSerializerBundle 上的自定义处理程序被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475801/

相关文章:

javascript - 在带有 IE 的 JavaScript 中使用 XMLSerializer 时,SVG 标记上不需要的 namespace

json - 如何使用 kotlinx.serialization 部分解码 JSON 字符串?

java - 处理程序和调度程序之间的区别

security - Symfony2 : How to hide link in Twig based on permissions

Symfony 5 security.interactive_login 事件未调用

php - 使用类表继承从存储库中获取子类

c# - 反序列化复杂类型但保持选定属性为序列化状态

android - 为什么哔声会导致应用程序崩溃?

servlets - Jetty 7 的 websocket、servlet 和资源处理程序的嵌入式配置

php - FosRestBundle 混合 twig 和 json