Closed
Description
Symfony version(s) affected: v4.1.0
Description
Serializer on deserialization fill only properties on abstract class, not on concrete class.
I have AbstractPrizeClass which extended by MoneyPrize and PointPrize.
App\Domain\Entity\Prize\AbstractPrize:
attributes:
id:
groups: ['admin_read']
place:
groups: ['admin_read', 'admin_write']
discriminator_map:
type_property: 'discriminator'
mapping:
money: 'App\Domain\Entity\Prize\Money\MoneyPrize'
points: 'App\Domain\Entity\Prize\PointPrize'
App\Domain\Entity\Prize\Money\MoneyPrize:
attributes:
wager:
groups: ['admin_read', 'admin_write']
amounts:
groups: ['frontapi', 'admin_read', 'admin_write']
App\Domain\Entity\Prize\Money\Amount:
attributes:
amount:
groups: ['frontapi', 'admin_read', 'admin_write']
currency:
groups: ['frontapi', 'admin_read', 'admin_write']
App\Domain\Entity\Prize\PointPrize:
attributes:
count:
groups: ['frontapi', 'admin_read', 'admin_write']
AbstractPrize have place
property. MoneyPrize have amounts
, etc. properties. PointPrize have count
property.
If I try desirialize next json: {"discriminator": "points", "count": 1000 }, serializer return PointPrize only with place
property filled, other properties are null.
How to reproduce
App\A:
attributes:
a:
groups: ['test']
discriminator_map:
type_property: 'discriminator'
mapping:
b: 'App\B'
App\B:
attributes:
b:
groups: ['test']
abstract class A { private $a; public getA() { return $a; } public setA($a) { $this->a = $a; }}
class B extends A { private $b; public getB() { return $b; } public setB($b) { $this->b = $b; }}
$b = $container->get('serializer')->deserialize('{"discriminator": "b", "a": 1000, "b": 2000 }', App\A::class, 'json');
$b->getA() === 1000
$b->getB() === null
Sorry for my english =|