【发布时间】:2015-10-06 15:38:44
【问题描述】:
我正在使用 JMS Serializer 包将 Symfony 实体序列化为 json。 一切正常,直到我开始使用 MaxDepth 注释来避免深度递归。
我有一个名为“Category”的实体,它有“Subcategories”,如果我在序列化它时不使用 MaxDepth 注释,它可以完美地工作并生成一个 json 对象,它应该是完整的树子类别:
{
"id": 1,
"name": "Category 1",
"subcategories": [{
"id": 3,
"name": "Category 1-1",
"subcategories": [{
"id": 7,
"name": "Category 1-1-1",
"subcategories": []
}]
}, {
"id": 4,
"name": "Category 1-2",
"subcategories": []
}]
}
我希望只序列化第一级子类别,因此我尝试以这种方式配置我的实体:
class Category
{
....
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parentCategory")
* @MaxDepth(1)
*/
private $subcategories;
....
}
但由于某种原因,我不明白何时启用 maxdepth 检查,使用以下代码:
$serializedObj = $jms->serialize($obj, 'json', SerializationContext::create()->enableMaxDepthChecks());
我得到了这个奇怪的结果(没有编码子类别,但它知道有两个):
{
"id": 1,
"name": "Categoria 1",
"subcategories": [{}, {}]
}
知道发生了什么吗?
谢谢!
【问题讨论】:
-
您是否尝试设置@MaxDepth(2) ?
-
我也遇到了同样的问题。我要疯了,因为
MaxDepth注释不起作用(是的,我有serializerEnableMaxDepthChecks=true)。 -
Lexxx 是正确的。在子实体中,您必须设置与传入 setGroups() 参数相同的组(在控制器方法中)
-
嘿,感谢您的精彩回复。可以在hole class上提到
@MaxDepth吗??
标签: symfony jmsserializerbundle