.. index:: single: Serializer How to use the Serializer ========================= Serializing and deserializing to and from objects and different formats (e.g. JSON or XML) is a very complex topic. Symfony comes with a :doc:`Serializer Component`, which gives you some tools that you can leverage for your solution. In fact, before you start, get familiar with the serializer, normalizers and encoders by reading the :doc:`Serializer Component`. You should also check out the `JMSSerializerBundle`_, which expands on the functionality offered by Symfony's core serializer. Activating the Serializer ------------------------- .. versionadded:: 2.3 The Serializer has always existed in Symfony, but prior to Symfony 2.3, you needed to build the ``serializer`` service yourself. The ``serializer`` service is not available by default. To turn it on, activate it in your configuration: .. configuration-block:: .. code-block:: yaml # app/config/config.yml framework: # ... serializer: enabled: true .. code-block:: xml .. code-block:: php // app/config/config.php $container->loadFromExtension('framework', array( // ... 'serializer' => array( 'enabled' => true ), )); Adding Normalizers and Encoders ------------------------------- Once enabled, the ``serializer`` service will be available in the container and will be loaded with two :ref:`encoders` (:class:`Symfony\\Component\\Serializer\\Encoder\\JsonEncoder` and :class:`Symfony\\Component\\Serializer\\Encoder\\XmlEncoder`) but no :ref:`normalizers`, meaning you'll need to load your own. You can load normalizers and/or encoders by tagging them as :ref:`serializer.normalizer` and :ref:`serializer.encoder`. It's also possible to set the priority of the tag in order to decide the matching order. Here is an example on how to load the :class:`Symfony\\Component\\Serializer\\Normalizer\\GetSetMethodNormalizer`: .. configuration-block:: .. code-block:: yaml # app/config/config.yml services: get_set_method_normalizer: class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer tags: - { name: serializer.normalizer } .. code-block:: xml .. code-block:: php // app/config/config.php use Symfony\Component\DependencyInjection\Definition; $definition = new Definition( 'Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer' )); $definition->addTag('serializer.normalizer'); $container->setDefinition('get_set_method_normalizer', $definition); .. note:: The :class:`Symfony\\Component\\Serializer\\Normalizer\\GetSetMethodNormalizer` is broken by design. As soon as you have a circular object graph, an infinite loop is created when calling the getters. You're encouraged to add your own normalizers that fit your use-case. .. _JMSSerializerBundle: http://jmsyst.com/bundles/JMSSerializerBundle