@@ -44,13 +44,14 @@ abstract class AbstractObjectNormalizer extends AbstractNormalizer
44
44
* @var callable|null
45
45
*/
46
46
private $ maxDepthHandler ;
47
+ private $ objectClassResolver ;
47
48
48
49
/**
49
50
* @var ClassDiscriminatorResolverInterface|null
50
51
*/
51
52
protected $ classDiscriminatorResolver ;
52
53
53
- public function __construct (ClassMetadataFactoryInterface $ classMetadataFactory = null , NameConverterInterface $ nameConverter = null , PropertyTypeExtractorInterface $ propertyTypeExtractor = null , ClassDiscriminatorResolverInterface $ classDiscriminatorResolver = null )
54
+ public function __construct (ClassMetadataFactoryInterface $ classMetadataFactory = null , NameConverterInterface $ nameConverter = null , PropertyTypeExtractorInterface $ propertyTypeExtractor = null , ClassDiscriminatorResolverInterface $ classDiscriminatorResolver = null , callable $ objectClassResolver = null )
54
55
{
55
56
parent ::__construct ($ classMetadataFactory , $ nameConverter );
56
57
@@ -60,6 +61,7 @@ public function __construct(ClassMetadataFactoryInterface $classMetadataFactory
60
61
$ classDiscriminatorResolver = new ClassDiscriminatorFromClassMetadata ($ classMetadataFactory );
61
62
}
62
63
$ this ->classDiscriminatorResolver = $ classDiscriminatorResolver ;
64
+ $ this ->objectClassResolver = $ objectClassResolver ;
63
65
}
64
66
65
67
/**
@@ -86,7 +88,7 @@ public function normalize($object, $format = null, array $context = array())
86
88
$ data = array ();
87
89
$ stack = array ();
88
90
$ attributes = $ this ->getAttributes ($ object , $ format , $ context );
89
- $ class = \get_class ($ object );
91
+ $ class = $ this -> objectClassResolver ? \call_user_func ( $ this -> objectClassResolver , $ object ) : \get_class ($ object );
90
92
$ attributesMetadata = $ this ->classMetadataFactory ? $ this ->classMetadataFactory ->getMetadataFor ($ class )->getAttributesMetadata () : null ;
91
93
92
94
foreach ($ attributes as $ attribute ) {
@@ -155,7 +157,7 @@ protected function instantiateObject(array &$data, $class, array &$context, \Ref
155
157
*/
156
158
protected function getAttributes ($ object , $ format = null , array $ context )
157
159
{
158
- $ class = \get_class ($ object );
160
+ $ class = $ this -> objectClassResolver ? \call_user_func ( $ this -> objectClassResolver , $ object ) : \get_class ($ object );
159
161
$ key = $ class .'- ' .$ context ['cache_key ' ];
160
162
161
163
if (isset ($ this ->attributesCache [$ key ])) {
0 commit comments