class MyEventSubscriber implements JMS\Serializer\EventDispatcher\EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
array('event' => 'serializer.pre_serialize', 'method' => 'onPreSerialize'),
);
}
public function onPreSerialize(JMS\Serializer\EventDispatcher\PreSerializeEvent $event)
{
/*
* @var YourEntity $object
*/
$object = $event->getObject();
$reflect = new \ReflectionClass($foo);
$props = $reflect->getProperties(\ReflectionProperty::IS_PRIVATE);
foreach ($props as $prop) {
$method = 'get'.ucfirst($prop->getName());
// here is call of methods like getId(), getName() etc,
// depending on name of entity properties
$object->$method();
}
}
}
哎!通过反思?非常昂贵,不是吗? – Bertuz
确实,但它的工作。 –
不幸的是不是递归的:我真正需要的是访问每个属性并根据需要更改类型。由于没有事件可以捕捉到访问节点的那一刻,我应该重新访问JMSSerialize遵循的所有实体属性。非常昂贵,我会说 – Bertuz