在 JMS 中序列化对象时包含一个方法

Include a method when object is serialized in JMS

我有一个方法 returns 一个值:

/**
* @ORM\Table()
* @ORM\Entity(repositoryClass="PersonRepository")
*/
class Person {

   /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
   private $id;

   public function getFoo(){
      return $this->id + 1;
   }

 //setters & getters

}

我想在序列化 Person 对象时包含 getFoo() returns 的值,这样它看起来像这样:

{
   'id' : 25
   'foo' : 26
}

您需要设置@VirtualProperty@SerializedName

use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\SerializedName;

class Person {
   ....
   ....
   ....

   /**
    * @VirtualProperty
    * @SerializedName("foo")
    */
   public function getFoo(){
      return $this->id + 1;
   }

    ....
    ....
    ....
}

您可以在此处阅读更多相关信息:http://jmsyst.com/libs/serializer/master/reference/annotations

注意这只适用于序列化而不适用于反序列化。