schmittjoh / JMSSerializerBundle

Easily serialize, and deserialize data of any complexity (supports XML, JSON, YAML)
http://jmsyst.com/bundles/JMSSerializerBundle
MIT License
1.8k stars 311 forks source link

Can't get any Enums to serialise #918

Closed CJDennis closed 1 year ago

CJDennis commented 1 year ago
Q A
Bug report? yes
Feature request? no
BC Break report? no
RFC? no

I'm running Symfony 5.4.14 with jms/serializer-bundle 5.2.0 and jms/serializer 3.21.0.

I have this in Symfony's config.yaml:

jms_serializer:
    enum_support: true

I can't get any Enums to serialise:

[Error] Object of class HMRX\CoreBundle\Entity\ClinicPharmacistRelationshipTypeEnum could not be converted to string

D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:150
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:145
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:271
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:145
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:271
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:101
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\Handler\ArrayCollectionHandler.php:96
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer-bundle\Debug\TraceableHandlerRegistry.php:50
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:208
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:145
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:271
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:145
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:271
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:101
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:169
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:101
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:169
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:101
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:169
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\JsonSerializationVisitor.php:145
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\GraphNavigator\SerializationGraphNavigator.php:271
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\Serializer.php:252
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\jms\serializer\src\Serializer.php:163
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\friendsofsymfony\rest-bundle\Serializer\JMSSerializerAdapter.php:60
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\friendsofsymfony\rest-bundle\View\ViewHandler.php:265
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\friendsofsymfony\rest-bundle\View\ViewHandler.php:190
D:\server\Apache24\htdocs\hmr\app\HMRX_App\vendor\friendsofsymfony\rest-bundle\View\ViewHandler.php:158

Steps required to reproduce the problem

  1. Serialise some data containing an Enum

Expected Result

Actual Result

ruzampl commented 1 year ago

Same problem, any temporary solutions?

ruzampl commented 1 year ago

I've just found simple solution :)

You need to add attribute or annotation with type for jms serializer, it doesn't work with property type. Working example:

` #[ORM\Column( type: Types::INTEGER, enumType: ProductType::class )]

[Type(ProductType::class)]

protected ProductType $type = ProductType::PRODUCT;

` where ProductType is an Enum. @CJDennis

scyzoryck commented 1 year ago

Ahm. I see now - based on the doctrine annotation it is mapped to simple type. I will take a look of we can fix it.