Symfony 如何访问每个实体';引发“serializer.pre_serialize”事件时的属性

Symfony 如何访问每个实体';引发“serializer.pre_serialize”事件时的属性,symfony,jmsserializerbundle,symfony-2.8,jms-serializer,Symfony,Jmsserializerbundle,Symfony 2.8,Jms Serializer,我希望递归访问序列化实体的每个属性,检查是否设置了字符串,并验证元数据属性是否正确设置为string,否则更改它以允许序列化 假设有一个users属性是ArrayCollection,但我强制该值在拐角处为字符串 我设置了一个SerializationSubscriber来捕获序列化程序。pre_serialize事件,但是我没有找到任何文档来利用访问者和周围环境 有什么提示吗?哎哟!通过反思?非常昂贵,不是吗?不幸的是,它不是递归的:我真正需要的是访问每个属性并在需要时更改类型。因为没有事件捕

我希望递归访问序列化实体的每个属性,检查是否设置了字符串,并验证元数据属性是否正确设置为
string
,否则更改它以允许序列化

假设有一个
users
属性是
ArrayCollection
,但我强制该值在拐角处为字符串

我设置了一个
SerializationSubscriber
来捕获
序列化程序。pre_serialize
事件,但是我没有找到任何文档来利用
访问者和周围环境


有什么提示吗?

哎哟!通过反思?非常昂贵,不是吗?不幸的是,它不是递归的:我真正需要的是访问每个属性并在需要时更改类型。因为没有事件捕捉访问节点的时刻,所以我应该按照JMSSerialize的方式重新访问实体的所有属性。我觉得相当贵
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();
        }
    }
}