Contributed by Mathias Arlaud in #43973.
The Serializer component allows you to pass some context information to the serializing and deserializing process. For example, to ignore certain attributes when serializing, you can use the following code:
$serializer->serialize($person, 'json', ['ignored_attributes' => ['age']]);
// Symfony also defines public constants for the names of all context options $serializer->serialize($person, 'json', [AbstractNormalizer::IGNORED_ATTRIBUTES => ['age']]);
In Symfony 6.1 we're improving the definition of serialization contexts with the introduction of Context Builders. Instead of having to deal with plain arrays, these objects allow you to define the context using a fluent interface which provides autocompletion, validation and documentation. As shown in this example, you can mix both arrays and builder objects and you can even merge these context objects between them:
use Symfony\Component\Serializer\Context\Encoder\CsvEncoderContextBuilder;
use Symfony\Component\Serializer\Context\Normalizer\ObjectNormalizerContextBuilder;
$initialContext = [ 'custom_key' => 'custom_value', ];
$contextBuilder = (new ObjectNormalizerContextBuilder()) ->withContext($initialContext) ->withGroups(['group1', 'group2']);
$contextBuilder = (new CsvEncoderContextBuilder()) ->withContext($contextBuilder) ->withDelimiter(';');
$serializer->serialize($something, 'csv', $contextBuilder->toArray());
If you need the context as a plain array (e.g. to pass it to serialize() method) call to the toArray() method:
$this->serializer->serialize($data, 'csv', $contextBuilder->toArray());
When building your own context builder, consider using the Symfony\Component\Serializer\Context\ContextBuilderTrait to reuse some common methods:
// src/Serializer/LegacyContextBuilder
namespace App\Serializer;
use Symfony\Component\Serializer\Context\ContextBuilderInterface; use Symfony\Component\Serializer\Context\ContextBuilderTrait;
final class LegacyContextBuilder implements ContextBuilderInterface { use ContextBuilderTrait;
public function withNullableDates(bool $nullable = true): static
{
return $this->with('zero_datetime_to_null', $nullable);
}
}
// you can now use this context builder as follows: // $context = (new LegacyContextBuilder())->withNullableDates();
Sponsor the Symfony project.
Login to add comment
Other posts in this group

Affected versions
Symfony UX symfony/ux-live-component and symfony/ux-twig-component versions <2.25.1 are affected by this security issue.
The issue has been fixed in the 2.25.1 version of these

Symfony has been reducing the need for configuration in applications for several years now. Thanks to PHP attributes, you can now configure most things alongside the relevant code, removing the need f

This week, development activity focused on polishing Symfony 7.3 ahead of its final release in two weeks. We also continued publishing articles highlighting the new features of Symfony 7.3 and shared

SymfonyOnline June 2025 is almost here, starting in a few weeks on:
June 10-11: Workshop days. June 12-13: Online conference days in English. All talks will be available for replay as soon as

Symfony 7.3 introduces several enhancements to the DependencyInjection component that simplify service configuration, make autoconfiguration more flexible, and enable environment-specific aliasing.
S

Contributed by Nicolas Grekas in

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:
June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe