[英]Symfony2 / JMS Serializer - How to manage differents object structure?
這是我的doctrine實體/ php類的簡化版本:
/**
* @ORM\Entity()
*/
class Command{
/**
* @ORM\Column(type="integer")
* @ORM\Id
*/
private $id;
/**
* @ORM\Column(type="string", length=50)
*/
private $customerName;
/**
* @ORM\Column(type="string", length=50)
*/
private $customerNickname;
// Other fields ...
}
使用基本的JMS Serialier包配置,我可以輕松地將一個“Command”對象序列化為JSON,如:
{
"id": "1",
"customerName": "Logan",
"customerNickname": "Wolverine",
"..."
}
但是,在我的情況下,我需要輸出JSON格式,我希望有一個子對象結構,如:
{
"id": "1",
"customer":
{
"customerName": "Logan",
"customerNickname": "Wolverine",
}
}
因為在這種情況下我有很多類,我寧願不改變我的類結構(php方面)
除了“pre | post-serialize”事件(對於這樣的事情似乎有點重),我沒有在官方JMS Serializer包中找到解決方案。
這是最簡單的解決方案嗎?
最好的祝福
為了記錄,你應該使用前/后序列化,但我發現了另一種方法。 首先,我啟用了元數據的讀取:
# app/config/config.yml
jms_serializer:
metadata:
auto_detection: true
然后創建文件夾App\\CoreBundle\\Resources\\config\\serializer\\
並創建相關文件yaml
(例如Entity.User.yml
)。
然后我排除所有內容,並使用virtual_properties
格式化數據的方式。
App\CoreBundle\Entity\User:
exclusion_policy: ALL
properties:
id:
expose: true
virtual_properties:
getCustomer:
serialized_name: customer
然后我在我的用戶實體中創建了一個方法,該方法以正確的格式返回我想要的數據。 對你來說,像:
public function getCustomer()
{
return array(
'customerName' => $this->getCustomerName(),
'customerNickname' => $this->getCustomerNickname()
);
}
您可以使用VirtualProperty批注創建虛擬屬性,而不是序列化兩個屬性。
/**
* @Serializer\VirtualProperty
* @Serializer\SerializedName("customer")
*
* @return array
*/
public function getCustomer()
{
return [
'customerName' => $this->customerName,
'customerNickname' => $this->customerNickname
];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.