[英]Symfony 2.7 + JMS Serializer + MaxDepth
我正在使用JMS序列化程序包將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": [{}, {}]
}
有什么想法嗎?
謝謝!
我有一個類似的問題,並且是這樣解決的:
在學生班:
/**
* @ORM\ManyToOne(targetEntity="school", inversedBy="student")
* @ORM\JoinColumn(name="school_id", referencedColumnName="id")
* @JMS\Serializer\Annotation\MaxDepth(2)
*/
protected $school;
在學生控制器中:
/**
* @FOS\RestBundle\Controller\Annotations\View(serializerEnableMaxDepthChecks=true)
*/
public function getStudentsAction() {
$students = $this->getDoctrine()
->getRepository('AppBundle:Student')
->findAll();
return $students;
}
school
什么都沒有序列化,這正是我所需要的!
當我曾經遇到過類似的問題時,這是由於未在子實體中使用相同的序列化程序組引起的,因此它給出了一個空對象(沒有序列化的屬性)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.