我正在使用JMSSerializerBundle将我的symfony实体序列化为JSON。我有以下类结构:
abstract class A {}
abstract class B extends A {}
class C extends B {}
现在我想序列化一个类C
的对象,所以我定义了一个新的组,比如说“example_group”,并设置@Groups
这样的注释:
abstract class A {
/**
* @Groups({"example_group"})
*/
private $a1;
private $a2;
}
abstract class B extends A {
/**
* @Groups({"example_group"})
*/
private $b1;
private $b2;
}
class C extends B {
/**
* @Groups({"example_group"})
*/
private $c1;
}
生成的序列化不仅包含C::c1
字段,还包含B::b1
,但令人惊讶的是不是A::a1
。这是预期的行为吗?我还需要包含A::a1
。我怎样才能做到这一点?
谢谢。
答案 0 :(得分:0)
不要忘记为这三个班级设置ExclusionPolicy
。
use JMS\Serializer\Annotation\ExclusionPolicy
/**
* @ExclusionPolicy("all")
*/
abstract class A
{
// ...
}
/**
* @ExclusionPolicy("all")
*/
abstract class B extends A
{
// ...
}
/**
* @ExclusionPolicy("all")
*/
class C extends B
{
// ...
}
通过使用组C
序列化example_group
,您应该获得通过@Groups
注释公开的所有属性。
因此,对于您的实例,您应该$a1
,$b1
和$c1
呈现。
答案 1 :(得分:0)
您应该覆盖基类用户序列化元数据/配置。对于JMS序列化器,请执行以下操作:
#File: Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: ALL
access_type: public_method # defaults to property; can also be set per property
properties:
email:
expose: true
type: string
groups: [api]
roles:
expose: true
type: array
groups: [api]