How to Use the Serializer
Edit this pageWarning: You are browsing the documentation for Symfony 2.5, which is no longer maintained.
Read the updated version of this page for Symfony 6.3 (the current stable version).
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 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 Serializer Component. You should also check out the JMSSerializerBundle, which expands on the functionality offered by Symfony's core serializer.
Activating the Serializer
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:
1 2 3 4 5
# app/config/config.yml
framework:
# ...
serializer:
enabled: true
1 2 3 4 5
<!-- app/config/config.xml -->
<framework:config>
<!-- ... -->
<framework:serializer enabled="true" />
</framework:config>
1 2 3 4 5 6 7
// 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 encoders
(JsonEncoder and
XmlEncoder)
but no normalizers, meaning you'll
need to load your own.
You can load normalizers and/or encoders by tagging them as serializer.normalizer and 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 GetSetMethodNormalizer:
1 2 3 4 5 6
# app/config/config.yml
services:
get_set_method_normalizer:
class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
tags:
- { name: serializer.normalizer }
1 2 3 4 5 6
<!-- app/config/config.xml -->
<services>
<service id="get_set_method_normalizer" class="Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer">
<tag name="serializer.normalizer" />
</service>
</services>
1 2 3 4 5 6 7 8
// 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 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.