diff --git a/DependencyInjection/JMSSerializerExtension.php b/DependencyInjection/JMSSerializerExtension.php index 339e17b1..2513c580 100644 --- a/DependencyInjection/JMSSerializerExtension.php +++ b/DependencyInjection/JMSSerializerExtension.php @@ -211,7 +211,7 @@ private function loadInternal(array $config, ScopedContainer $container, array $ if ($config['enum_support']) { $container->getDefinition('jms_serializer.metadata.enum_driver') - ->setDecoratedService('jms_serializer.metadata_driver') + ->setDecoratedService('jms_serializer.metadata_driver', null, 50) ->setPublic(false); } else { $container->removeDefinition('jms_serializer.metadata.enum_driver'); diff --git a/Tests/DependencyInjection/Fixture/ObjectUsingEnumDeserialize.php b/Tests/DependencyInjection/Fixture/ObjectUsingEnumDeserialize.php new file mode 100644 index 00000000..c8b73c10 --- /dev/null +++ b/Tests/DependencyInjection/Fixture/ObjectUsingEnumDeserialize.php @@ -0,0 +1,34 @@ +") + */ + private $two; + /** + * @Type("array>") + */ + private array $three; + + public function __construct() + { + $this->one = ObjectUsingEnumDeserializeCard::Black; + $this->two = ObjectUsingEnumDeserializeCard::Red; + $this->three = [ObjectUsingEnumDeserializeCard::Red, ObjectUsingEnumDeserializeCard::Black]; + } +} + +enum ObjectUsingEnumDeserializeCard +{ + case Black; + case Red; +} diff --git a/Tests/DependencyInjection/JMSSerializerExtensionTest.php b/Tests/DependencyInjection/JMSSerializerExtensionTest.php index bd9333a6..3e92b316 100644 --- a/Tests/DependencyInjection/JMSSerializerExtensionTest.php +++ b/Tests/DependencyInjection/JMSSerializerExtensionTest.php @@ -17,6 +17,7 @@ use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\IncludeInterfaces\AnInterfaceImplementation; use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\IncludeInterfaces\AnObject; use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\ObjectUsingEnum; +use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\ObjectUsingEnumDeserialize; use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\ObjectUsingExpressionLanguage; use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\ObjectUsingExpressionProperties; use JMS\SerializerBundle\Tests\DependencyInjection\Fixture\SimpleObject; @@ -47,16 +48,17 @@ private function clearTempDir() // clear temporary directory $dir = sys_get_temp_dir() . '/serializer'; if (is_dir($dir)) { - foreach (new \RecursiveDirectoryIterator($dir) as $file) { - $filename = $file->getFileName(); - if ('.' === $filename || '..' === $filename) { - continue; - } + $files = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS), + \RecursiveIteratorIterator::CHILD_FIRST + ); - @unlink($file->getPathName()); + foreach ($files as $fileinfo) { + $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink'); + $todo($fileinfo->getRealPath()); } - @rmdir($dir); + rmdir($dir); } } @@ -593,6 +595,9 @@ public function testEnumSupportCanBeEnabled() $object = new ObjectUsingEnum(); $this->assertEquals('{"one":"Black","two":"Red","three":["Red","Black"]}', $serializer->serialize($object, 'json')); + + $object = new ObjectUsingEnumDeserialize(); + $this->assertEquals($object, $serializer->deserialize('{"one":"Black","two":"Red","three":["Red","Black"]}', ObjectUsingEnumDeserialize::class, 'json')); } public function testEnumSupportIsDisabledByDefault()