2017-07-24 35 views
0

所以我有这样的(简单的代码片段)的响应类:JMS序列化程序忽略带访问器注释的排除策略?

/** 
* @Serializer\ExclusionPolicy("all") 
*/ 
class MyResponse 
{ 
    /** 
    * @Serializer\Expose 
    * @Serializer\Groups({"myGroup"}) 
    * @Serializer\Accessor("getMyName") 
    */ 
    public $name; 

    public function getMyName() 
    { 
     return 'Donald'; 
    } 
} 

排除政策不包括从被序列化,除非他们明确地@Serializer\Expose暴露和数据组匹配的所有领域。

这适用于所有领域,除了那些与@Serializer\Accessor注释。无论组策略如何,这些字段总是包含在内。我无法在文档或任何其他报告中找到任何暗示@Serializer\Accessor注释覆盖组策略的任何内容,也无法手动检查访问器函数中的数据组。

有没有办法做到这一点,或者我将不得不在响应构造函数中内联我所有的存取函数?我试图避免有一个巨大的100L +构造函数,但它击败了使用accessor注释点,如果我不能排除某些领域...

+0

您是否尝试过使用'$ serializer->连载(新MyResponse(),“JSON”,\ JMS \ Serializer \ SerializationContext :: create() - > setGroups(array('Default')));'? – tftd

回答

0

我从来没有使用Accessor注释,所以我不知道原因为什么它不工作,但我可以建议你把注释直接功能将它们标记为虚拟财产:

/** 
* @Serializer\ExclusionPolicy("all") 
*/ 
class MyResponse 
{ 
    public $name; 

    /** 
    * @Serializer\VirtualProperty() 
    * @Serializer\SerializedName("name") 
    * @Serializer\Groups({"myGroup"}) 
    */ 
    public function getMyName() 
    { 
     return 'Donald'; 
    } 
}