symfony 序列化程序 jmsserializerbundle 服务名称冲突

symfony serializer jmsserializerbundle service name conflict

我有以下问题:我正在开发一个依赖于 jmsserializerbundle (1.1) 的 symfony (2.8) 项目。 当启用 symfony-serializer 和 jms-serializer 包时,

# app/config/config.yml
framework:
    # ...
    serializer: { enabled: true }

jms_serializer:
    metadata:
        #...

在调用 $this->get('serializer')$this->get('jms_serializer') 时,我只得到了 jms-serializer。此问题似乎已在 jmsserializerbundle 2.0 版中得到解决:https://github.com/schmittjoh/JMSSerializerBundle/issues/558

有没有办法在不将 jmsserializerbundle 更新到 2.0 的情况下解决这个问题?

在自定义服务中包装 symfony-serializer 时,与正常的 symfony-serializer 配置相比,性能会有什么不同吗?像这样:

<?php

use SomeCustomNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;

class SerializerService implements SerializerInterface
{

    private $serializer;

    public function __construct()
    {
        $this->serializer = new Serializer(
            [new SomeCustomNormalizer(), new ObjectNormalizer()],
            [new JsonEncode()]
        );
    }

    public function serialize($data, $format, array $context = array())
    {
        # serialize
    }

    public function deserialize($data, $type, $format, array $context = array())
    {
        # deserialize
    }
}
# SomeBundle/Resources/config/services.yml
serializer_service:
      class: SomeBundle\SerializerService

我遇到了有关性能的问题,因为现有的 jms 配置在应用程序内核中注册了 jmsserializerbundle,而我的自定义服务并非如此,它刚刚在 services.yml 中设置。

提前致谢

解决方案

如下所述,我只需要在 jms-config 中添加一行:

# app/config/config.yml
jms_serializer:
    enable_short_alias: false
    metadata:
        #...

Is there any way to solve this without updating jmsserializerbundle to 2.0?

JMS 序列化程序提供选项:

jms_serializer:
    enable_short_alias: false

Would there be any difference in performance compared to the normal symfony-serializer configuration when wrapping a Symfony-serializer in a custom service? like so:

我猜不是,Symfony 序列化器只是 'another' 由 FrameworkBundle 定义的服务,它是序列化器 class 的包装器,注入了规范化器和编码器。

如果您创建自己的服务(如您的示例),它也将由服务容器编译。您可以在此处查看定义:https://github.com/symfony/symfony/blob/v2.8.52/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml