簡體   English   中英

Symfony2 / JMS Serializer - 如何管理不同的對象結構?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM