JMS 序列化程序排除 public 属性

JMS Serializer exclude public properties

我有一个class我想连载,但是exclude一个public属性。到目前为止,我尝试了 @Exclude 但没有成功(请参阅结果)。

有什么解决这个问题的想法吗?

实体:

class Checkout extends Entity
{
    /**
     * @Exclude()
     */
    public $normalizerCallbacks = [
        'a' => 1,
        'b' => 2,
    ];

    ..........

序列化:

$checkout = $this->getDoctrine()->getRepository('App:Checkout')->find($id);

$serializer = $this->get('jms_serializer');
$data = $serializer->serialize($checkout, 'json');

结果:

{
    normalizer_callbacks: {
        a: 1
        b: 2
    }
}

编辑:试用 2015-09-10 18 --> 无效

use JMS\Serializer\Annotation as JMS;

/**
 * User
 *
 * @ORM\Table(name="checkout", options={"collate"="utf8_general_ci"})
 * @ORM\Entity
 *
 * @JMS\ExclusionPolicy("none")
 */
class Checkout extends Entity
{
    /**
     * @JMS\Exclude();
     */
    public $normalizerCallbacks = [
...

编辑:试用 2015-09-11 09(更新 12)--> 配置

  1. 添加到 "jms/serializer-bundle": "^1.0" 作曲家和 运行 更新
  2. new JMS\SerializerBundle\JMSSerializerBundle() 添加到 AppKernel
  3. jms_serializer.camel_case_naming_strategy.class: JMS\Serializer\Naming\IdenticalPropertyNamingStrategy添加到parameters.yml
  4. 然后像Serialize
  5. 一样使用它

试试你是否包含正确:

use JMS\Serializer\Annotation as JMS;

然后像这样使用它:

@JMS\Exclude();

在你的注释中。

还要确保您的 class 带有 @ExclusionPolicy("none") 注释(参见 http://jmsyst.com/libs/serializer/master/reference/annotations)。

你也可以反过来做,特别是 @Expose 而 class 是用 @ExlucsionPolicy("all").

注释的

确保在重新测试之前清理缓存。