JMS Serializer忽略非持久属性

时间:2015-10-27 13:53:25

标签: json symfony jmsserializerbundle

我一直在为我的一个Symfony2 / Doctrine对象上的属性而苦苦挣扎,这些对象并未持久存储在数据库中。它是一个包含标签,键和值等属性的对象数组,但即使它被定义为一个简单的数组数组,它​​也不会显示出来。

以下是在通常持久化的对象中定义数组的方式:

/*
* @Accessor(getter="getReceipt",setter="setReceipt")
* @Type("ArrayCollection<MyProject\ReceiptProperty>")
* @Expose
* @Groups({"details"})
*/
protected $receipt;

public function setReceipt($receipt) {
    $this->receipt = $receipt;
}

public function getReceipt() {
    return $this->receipt;
}

以下是数组中对象的定义方式

/**
* @ExclusionPolicy("all")
*/
class ReceiptProperty extends APIObject {
    /**
    * @Type("string")
    * @Expose
    * @Groups({"basic"})
    */
    public $label;

    /**
    * @Type("string")
    * @Expose
    * @Groups({"basic"})
    */
    public $type;

    /**
    * @Type("string")
    * @Expose
    * @Groups({"basic"})
    */
    public $key;

    /**
    * @Expose
    * @Groups({"basic"})
    */
    public $value;

    public function __construct($data) {
        $this->label = $data['label'];
        $this->type = $data['type'];
        $this->key = $data['key'];
        $this->value = $data['value'];
    }
}

通过在使用print_r进行序列化之前直接打印对象,我可以看到数据存在,但无论配置是什么,该字段都不会显示。

1 个答案:

答案 0 :(得分:2)

为了帮助那些可能会遇到类似问题的人,我的问题本质上是一个不正确的注释。

在第一个代码块中,您会注意到注释注释以/ *

开头

事实证明,JMS Serializer不会处理不以/ **开头的注释,所以它有效地忽略了我的命令。更新注释注释后,它按预期工作。这总是小事......