JMS Serializer 选择性序列化

JMS Serializer selective serialization

PHP,Symfony,JMSSerializerBundle。

我想将Organization对象中的User对象序列化为它的ID,但是当User对象属于其他对象时,使用默认序列化。

public class Organization {
   // type is User   
   $user;  -> "123123"
...
}

public class Other {
   // type is User   
   $user;  -> "{id: 123123, name: John, ...}"
...
}

通过合理的努力是否可能?

您可以从序列化中排除 User 对象,并添加一个虚拟 属性 来 return 用户 ID(您可以将其称为 userId、user 或任何您想要的名称)。

use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\Exclude;

public class Organization {

   /**
    * ...
    * @Exclude
    */ 
    $user;

  /**
   * @VirtualProperty
   * @SerializedName("user")
   */
   public function getUserId()
   { 
      return $this->user->getId(); 
   }
    ...
}