JMSSerialerBundle反序列化关系

时间:2016-01-14 10:23:38

标签: jmsserializerbundle jms-serializer

我有相关的实体我想用它的所有关系序列化实体,序列化工作正常(我想),例如,我保存了这个json。

{  
  "relation_one":1,
  "relation_two":1,
  "relation_three":1,
  "other_integer_data":2996,
  "other_integer_data2":1174
}

后来我尝试反序列化,我只得到

{  
  "other_integer_data":2996,
  "other_integer_data2":1174
}

未映射表示关系的属性。反序列化后我需要做些什么来获得正确映射的对象。

我的实体代码:

/**
 * @var RelationOne
 *
 * @ORM\ManyToOne(targetEntity="RelationOne", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_one_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationOne;

/**
 * @var RelationTwo
 *
 * @ORM\ManyToOne(targetEntity="RelationTwo", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_two_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationTwo;

/**
 * @var RelationThree
 *
 * @ORM\ManyToOne(targetEntity="RelationThree", inversedBy="entity")
 * @ORM\JoinColumn(name="relation_three_id", referencedColumnName="id", nullable=true, onDelete="RESTRICT")
 * @Assert\NotBlank()
 * @Assert\Valid()
 */
private $relationThree;



/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_one")
 * @return integer
 */
public function getVirtualRelationOne()
{
    if ($this->relationOne) {
        return $this->relationOne->getId();
    }

    return null;
}

/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_two")
 * @return integer
 */
public function getVirtualRelationTwo()
{
    if ($this->relationOne) {
        return $this->relationOne->getId();
    }

    return null;
}

/**
 * @JMS\VirtualProperty
 * @JMS\SerializedName("relation_three")
 * @return integer
 */
public function getVirtualRelationThree()
{
    if ($this->relationThree) {
        return $this->relationThree->getId();
    }

    return null;
}

修改 经过一些测试后,我发现那些关系id只是因为虚方法而设置,如果没有它们,它们就不会被序列化,所以修改后的问题就是如何正确地序列化和反序列化具有关系的实体。

0 个答案:

没有答案