Skip to content

Commit ae16e96

Browse files
srozefabpot
authored andcommitted
[Serializer] Serialize and deserialize from abstract classes
1 parent e29926b commit ae16e96

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
use Symfony\Component\Security\Core\Security;
6363
use Symfony\Component\Serializer\Encoder\DecoderInterface;
6464
use Symfony\Component\Serializer\Encoder\EncoderInterface;
65+
use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata;
6566
use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
6667
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
6768
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
@@ -1153,6 +1154,11 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
11531154
$container->removeDefinition('serializer.normalizer.dateinterval');
11541155
}
11551156

1157+
if (!class_exists(ClassDiscriminatorFromClassMetadata::class)) {
1158+
$container->removeAlias('Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface');
1159+
$container->removeDefinition('serializer.mapping.class_discriminator_resolver');
1160+
}
1161+
11561162
$chainLoader = $container->getDefinition('serializer.mapping.chain_loader');
11571163

11581164
if (!class_exists('Symfony\Component\PropertyAccess\PropertyAccessor')) {

Resources/config/serializer.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424

2525
<service id="serializer.property_accessor" alias="property_accessor" />
2626

27+
<!-- Discriminator Map -->
28+
<service id="serializer.mapping.class_discriminator_resolver" class="Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata">
29+
<argument type="service" id="serializer.mapping.class_metadata_factory" />
30+
</service>
31+
<service id="Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface" alias="serializer.mapping.class_discriminator_resolver" />
32+
2733
<!-- Normalizer -->
2834
<service id="serializer.normalizer.dateinterval" class="Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer">
2935
<!-- Run before serializer.normalizer.object -->
@@ -50,6 +56,7 @@
5056
<argument>null</argument> <!-- name converter -->
5157
<argument type="service" id="serializer.property_accessor" />
5258
<argument type="service" id="property_info" on-invalid="ignore" />
59+
<argument type="service" id="serializer.mapping.class_discriminator_resolver" on-invalid="ignore" />
5360

5461
<!-- Run after all custom normalizers -->
5562
<tag name="serializer.normalizer" priority="-1000" />

0 commit comments

Comments
 (0)