8000 Add ChainNormalizer and ChainDenormalizer · symfony/symfony@05d22f8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 05d22f8

Browse files
committed
Add ChainNormalizer and ChainDenormalizer
1 parent 4328f5b commit 05d22f8

File tree

50 files changed

+959
-484
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+959
-484
lines changed

src/Symfony/Bridge/Twig/Tests/Extension/SerializerExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public static function serializerDataProvider(): \Generator
5050
private function getTwig(string $template): Environment
5151
{
5252
$meta = new ClassMetadataFactory(new AttributeLoader());
53-
$runtime = new SerializerRuntime(new Serializer([new ObjectNormalizer($meta)], [new JsonEncoder(), new YamlEncoder()]));
53+
$runtime = new SerializerRuntime(new Serializer([], [new JsonEncoder(), new YamlEncoder()], new ObjectNormalizer($meta), new ObjectNormalizer($meta)));
5454

5555
$mockRuntimeLoader = $this->createMock(RuntimeLoaderInterface::class);
5656
$mockRuntimeLoader

src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
1818
use Symfony\Component\Serializer\Encoder\JsonEncoder;
1919
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
20+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
21+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2022
use Symfony\Component\Serializer\Normalizer\MimeMessageNormalizer;
2123
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2224
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
@@ -106,12 +108,23 @@ public function testSymfonySerialize()
106108

107109
$extractor = new PhpDocExtractor();
108110
$propertyNormalizer = new PropertyNormalizer(null, null, $extractor);
109-
$serializer = new Serializer([
111+
$normalizers = [
112+
new MimeMessageNormalizer($propertyNormalizer),
113+
new ObjectNormalizer(null, null, null, $extractor),
114+
$propertyNormalizer,
115+
];
116+
$denormalizers = [
110117
new ArrayDenormalizer(),
111118
new MimeMessageNormalizer($propertyNormalizer),
112119
new ObjectNormalizer(null, null, null, $extractor),
113120
$propertyNormalizer,
114-
], [new JsonEncoder()]);
121+
];
122+
$serializer = new Serializer(
123+
[],
124+
[new JsonEncoder()],
125+
new ChainNormalizer($normalizers),
126+
new ChainDenormalizer($denormalizers),
127+
);
115128

116129
$serialized = $serializer->serialize($e, 'json', [ObjectNormalizer::IGNORED_ATTRIBUTES => ['cachedBody']]);
117130
$this->assertStringMatchesFormat($expectedJson, json_encode(json_decode($serialized), \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES));

src/Symfony/Bridge/Twig/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"symfony/security-core": "^6.4|^7.0",
4444
"symfony/security-csrf": "^6.4|^7.0",
4545
"symfony/security-http": "^6.4|^7.0",
46-
"symfony/serializer": "^6.4|^7.0",
46+
"symfony/serializer": "^7.1",
4747
"symfony/stopwatch": "^6.4|^7.0",
4848
"symfony/console": "^6.4|^7.0",
4949
"symfony/expression-language": "^6.4|^7.0",

src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
3434
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
3535
use Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer;
36+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
37+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
3638
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
3739
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
3840
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
@@ -58,12 +60,16 @@
5860
;
5961

6062
$container->services()
63+
->set('serializer.normalizer', ChainNormalizer::class)
64+
->args([[]])
65+
->set('serializer.denormalizer', ChainDenormalizer::class)
66+
->args([[]])
6167
->set('serializer', Serializer::class)
62-
->args([[], []])
68+
->args([[], [], service('serializer.normalizer'), service('serializer.denormalizer')])
6369

6470
->alias(SerializerInterface::class, 'serializer')
65-
->alias(NormalizerInterface::class, 'serializer')
66-
->alias(DenormalizerInterface::class, 'serializer')
71+
->alias(NormalizerInterface::class, 'serializer.normalizer')
72+
->alias(DenormalizerInterface::class, 'serializer.denormalizer')
6773
->alias(EncoderInterface::class, 'serializer')
6874
->alias(DecoderInterface::class, 'serializer')
6975

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"symfony/scheduler": "^6.4.3|^7.0.3",
6060
"symfony/security-bundle": "^6.4|^7.0",
6161
"symfony/semaphore": "^6.4|^7.0",
62-
"symfony/serializer": "^6.4|^7.0",
62+
"symfony/serializer": "^7.1",
6363
"symfony/stopwatch": "^6.4|^7.0",
6464
"symfony/string": "^6.4|^7.0",
6565
"symfony/translation": "^6.4|^7.0",

src/Symfony/Component/ErrorHandler/Tests/ErrorRenderer/SerializerErrorRendererTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function testSerializerContent()
3030
{
3131
$exception = new \RuntimeException('Foo');
3232
$errorRenderer = new SerializerErrorRenderer(
33-
new Serializer([new ProblemNormalizer()], [new JsonEncoder()]),
33+
new Serializer([], [new JsonEncoder()], new ProblemNormalizer()),
3434
fn () => 'json'
3535
);
3636

src/Symfony/Component/ErrorHandler/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"require-dev": {
2424
"symfony/http-kernel": "^6.4|^7.0",
25-
"symfony/serializer": "^6.4|^7.0",
25+
"symfony/serializer": "^7.1",
2626
"symfony/deprecation-contracts": "^2.5|^3"
2727
},
2828
"conflict": {

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
use Symfony\Component\Serializer\Encoder\JsonEncoder;
2525
use Symfony\Component\Serializer\Encoder\XmlEncoder;
2626
use Symfony\Component\Serializer\Exception\PartialDenormalizationException;
27+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
28+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2729
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2830
use Symfony\Component\Serializer\Serializer;
2931
use Symfony\Component\Validator\Constraints as Assert;
@@ -199,7 +201,10 @@ public function testQueryNullPayloadAndNotDefaultOrNullableArgument()
199201
}
200202
}
201203

202-
public function testWithoutValidatorAndCouldNotDenormalize()
204+
/**
205+
* @group legacy
206+
*/
207+
public function testWithoutValidatorAndCouldNotDenormalizeWithLegacySerializer()
203208
{
204209
$content = '{"price": 50, "title": ["not a string"]}';
205210
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
@@ -223,10 +228,34 @@ public function testWithoutValidatorAndCouldNotDenormalize()
223228
}
224229
}
225230

231+
public function testWithoutValidatorAndCouldNotDenormalize()
232+
{
233+
$content = '{"price": 50, "title": ["not a string"]}';
234+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
235+
236+
$resolver = new RequestPayloadValueResolver($serializer);
237+
238+
$argument = new ArgumentMetadata('invalid', RequestPayload::class, false, false, null, false, [
239+
MapRequestPayload::class => new MapRequestPayload(),
240+
]);
241+
$request = Request::create('/', 'POST', server: ['CONTENT_TYPE' => 'application/json'], content: $content);
242+
243+
$kernel = $this->createMock(HttpKernelInterface::class);
244+
$arguments = $resolver->resolve($request, $argument);
245+
$event = new ControllerArgumentsEvent($kernel, function () {}, $arguments, $request, HttpKernelInterface::MAIN_REQUEST);
246+
247+
try {
248+
$resolver->onKernelControllerArguments($event);
249+
$this->fail(sprintf('Expected "%s" to be thrown.', HttpException::class));
250+
} catch (HttpException $e) {
251+
$this->assertInstanceOf(PartialDenormalizationException::class, $e->getPrevious());
252+
}
253+
}
254+
226255
public function testValidationNotPassed()
227256
{
228257
$content = '{"price": 50, "title": ["not a string"]}';
229-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
258+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
230259

231260
$validator = $this->createMock(ValidatorInterface::class);
232261
$validator->expects($this->never())
@@ -311,7 +340,7 @@ public function testRequestContentValidationPassed()
311340
{
312341
$content = '{"price": 50}';
313342
$payload = new RequestPayload(50);
314-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
343+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
315344

316345
$validator = $this->createMock(ValidatorInterface::class);
317346
$validator->expects($this->once())
@@ -339,7 +368,7 @@ public function testQueryStringValidationPassed()
339368
$payload = new RequestPayload(50);
340369
$query = ['price' => '50'];
341370

342-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
371+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
343372

344373
$validator = $this->createMock(ValidatorInterface::class);
345374
$validator->expects($this->once())
@@ -367,7 +396,7 @@ public function testRequestInputValidationPassed()
367396
$input = ['price' => '50'];
368397
$payload = new RequestPayload(50);
369398

370-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
399+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
371400

372401
$validator = $this->createMock(ValidatorInterface::class);
373402
$validator->expects($this->once())
@@ -412,7 +441,7 @@ public function testItThrowsOnVariadicArgument()
412441
public function testAcceptFormatPassed(mixed $acceptFormat, string $contentType, string $content)
413442
{
414443
$encoders = ['json' => new JsonEncoder(), 'xml' => new XmlEncoder()];
415-
$serializer = new Serializer([new ObjectNormalizer()], $encoders);
444+
$serializer = new Serializer([], $encoders, new ObjectNormalizer(), new ObjectNormalizer());
416445
$validator = (new ValidatorBuilder())->getValidator();
417446
$resolver = new RequestPayloadValueResolver($serializer, $validator);
418447

@@ -475,7 +504,7 @@ public static function provideMatchedFormatContext(): iterable
475504
*/
476505
public function testAcceptFormatNotPassed(mixed $acceptFormat, string $contentType, string $content, string $expectedExceptionMessage)
477506
{
478-
$serializer = new Serializer([new ObjectNormalizer()]);
507+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
479508
$validator = (new ValidatorBuilder())->getValidator();
480509
$resolver = new RequestPayloadValueResolver($serializer, $validator);
481510

@@ -546,7 +575,7 @@ public function testValidationGroupsPassed(string $method, ValueResolver $attrib
546575
$payload = new RequestPayload(50);
547576
$payload->title = 'A long title, so the validation passes';
548577

549-
$serializer = new Serializer([new ObjectNormalizer()]);
578+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
550579
$validator = (new ValidatorBuilder())->enableAttributeMapping()->getValidator();
551580
$resolver = new RequestPayloadValueResolver($serializer, $validator);
552581

@@ -572,7 +601,7 @@ public function testValidationGroupsNotPassed(string $method, ValueResolver $att
572601
{
573602
$input = ['price' => '50', 'title' => 'Too short'];
574603

575-
$serializer = new Serializer([new ObjectNormalizer()]);
604+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
576605
$validator = (new ValidatorBuilder())->enableAttributeMapping()->getValidator();
577606
$resolver = new RequestPayloadValueResolver($serializer, $validator);
578607

@@ -631,7 +660,7 @@ public static function provideValidationGroupsOnManyTypes(): iterable
631660

632661
public function testQueryValidationErrorCustomStatusCode()
633662
{
634-
$serializer = new Serializer([new ObjectNormalizer()], []);
663+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
635664

636665
$validator = $this->createMock(ValidatorInterface::class);
637666

@@ -664,7 +693,7 @@ public function testQueryValidationErrorCustomStatusCode()
664693
public function testRequestPayloadValidationErrorCustomStatusCode()
665694
{
666695
$content = '{"price": 50, "title": ["not a string"]}';
667-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
696+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
668697

669698
$validator = $this->createMock(ValidatorInterface::class);
670699
$validator->expects($this->never())

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private function createSqsEnvelope()
6868
private function createSerializer(): Serializer
6969
{
7070
$serializer = new Serializer(
71-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
71+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
7272
);
7373

7474
return $serializer;

src/Symfony/Component/Messenger/Bridge/AmazonSqs/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"require-dev": {
2727
"symfony/http-client-contracts": "^2.5|^3",
2828
"symfony/property-access": "^6.4|^7.0",
29-
"symfony/serializer": "^6.4|^7.0"
29+
"symfony/serializer": "^7.1"
3030
},
3131
"conflict": {
3232
"symfony/http-client-contracts": "<2.5"

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Fixtures/long_receiver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2727

2828
$serializer = new Serializer(
29-
new SerializerComponent\Serializer([new ObjectNormalizer(), new ArrayDenormalizer()], ['json' => new JsonEncoder()])
29+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new SerializerComponent\Normalizer\ChainDenormalizer([new ObjectNormalizer(), new ArrayDenormalizer()]))
3030
);
3131

3232
$connection = Connection::fromDsn(getenv('DSN'));

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpExtIntegrationTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ private function waitForOutput(Process $process, string $output, $timeoutInSecon
262262
private function createSerializer(): SerializerInterface
263263
{
264264
return new Serializer(
265-
new SerializerComponent\Serializer([new ObjectNormalizer(), new ArrayDenormalizer()], ['json' => new JsonEncoder()])
265+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new SerializerComponent\Normalizer\ChainDenormalizer([new ObjectNormalizer(), new ArrayDenormalizer()]))
266266
);
267267
}
268268

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class AmqpReceiverTest extends TestCase
3232
public function testItReturnsTheDecodedMessageToTheHandler()
3333
{
3434
$serializer = new Serializer(
35-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
35+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
3636
);
3737

3838
$amqpEnvelope = $this->createAMQPEnvelope();

src/Symfony/Component/Messenger/Bridge/Amqp/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"symfony/event-dispatcher": "^6.4|^7.0",
2525
"symfony/process": "^6.4|^7.0",
2626
"symfony/property-access": "^6.4|^7.0",
27-
"symfony/serializer": "^6.4|^7.0"
27+
"symfony/serializer": "^7.1"
2828
},
2929
"autoload": {
3030
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" },

src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private function createBeanstalkdEnvelope(): array
9292
private function createSerializer(): Serializer
9393
{
9494
$serializer = new Serializer(
95-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
95+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
9696
);
9797

9898
return $serializer;

src/Symfony/Component/Messenger/Bridge/Beanstalkd/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
},
1919
"require-dev": {
2020
"symfony/property-access": "^6.4|^7.0",
21-
"symfony/serializer": "^6.4|^7.0"
21+
"symfony/serializer": "^7.1"
2222
},
2323
"autoload": {
2424
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Beanstalkd\\": "" },

src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private function createDoctrineEnvelope(): array
133133
private function createSerializer(): Serializer
134134
{
135135
$serializer = new Serializer(
136-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
136+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
137137
);
138138

139139
return $serializer;

src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"require-dev": {
2525
"doctrine/persistence": "^1.3|^2|^3",
2626
"symfony/property-access": "^6.4|^7.0",
27-
"symfony/serializer": "^6.4|^7.0"
27+
"symfony/serializer": "^7.1"
2828
},
2929
"conflict": {
3030
"doctrine/persistence": "<1.3"

src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public static function redisEnvelopeProvider(): \Generator
7575
],
7676
new DummyMessage('Hi'),
7777
new Serializer(
78-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
78+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
7979
),
8080
];
8181

src/Symfony/Component/Messenger/Bridge/Redis/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"require-dev": {
2424
"symfony/property-access": "^6.4|^7.0",
25-
"symfony/serializer": "^6.4|^7.0"
25+
"symfony/serializer": "^7.1"
2626
},
2727
"autoload": {
2828
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" },

src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use Symfony\Component\Messenger\Transport\Serialization\Serializer;
2121
use Symfony\Component\Serializer\Encoder\JsonEncoder;
2222
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
23+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
24+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2325
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2426
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
2527

@@ -57,11 +59,12 @@ public function testDeserialization()
5759
$exception = new \Exception('exception message');
5860
$stamp = ErrorDetailsStamp::create($exception);
5961
$serializer = new Serializer(
60-
new SymfonySerializer([
61-
new ArrayDenormalizer(),
62-
new FlattenExceptionNormalizer(),
63-
new ObjectNormalizer(),
64-
], [new JsonEncoder()])
62+
new SymfonySerializer(
63+
[],
64+
[new JsonEncoder()],
65+
new ChainNormalizer([new FlattenExceptionNormalizer(), new ObjectNormalizer()]),
66+
new ChainDenormalizer([new ArrayDenormalizer(), new FlattenExceptionNormalizer(), new ObjectNormalizer()])
67+
)
6568
);
6669

6770
$deserializedEnvelope = $serializer->decode($serializer->encode(new Envelope(new \stdClass(), [$stamp])));

0 commit comments

Comments
 (0)
0