2013-02-13 69 views
0

我有一堆對象,我需要能夠序列化在JSON,PHP,whatnot。我有東西,如JSONSerializer,並明確有serialize()可用。現在我仍然需要的是特定於對象的邏輯來將對象轉換爲可以饋送給JSONSerializer或serialize()的東西。基本上是一個原始類型或只包含匹配這個條件的元素的數組。非序列化:命名和實現

兩個問題:

  1. 你怎麼稱呼串行化之前這一步呢? 「arrayification」?我正在考慮給我的對象一個toArray()方法。我也希望他們實現一些指定此方法的接口?任何人更好的主意,然後「Arrayable」?

  2. 如何才能最好地瞭解反序列化?我可以在每個對象中都有一個靜態的newFromArray方法。儘管不喜歡靜態代碼。對工廠的任何意見都可以從他們的「陣列化」中構建給定類型的對象?

注意:這需要使用PHP 5.3。

+1

你可能想看看這個:https://github.com/sebastianbergmann/pson 使用這個,你可以將php對象轉換爲json並返回。它是由Sebastian Bergman寫的,他寫了PHPUnit – MarcDefiant 2013-02-13 12:26:36

+0

的同一個人謝謝,這很有趣。即使對於這個項目,我也不能使用PHP 5.4。 – 2013-02-13 12:29:31

+0

我其實不喜歡在PSON中採用的方法。序列化不需要包含任何類名或非公共狀態。此外,我想自己指定所有的密鑰,因爲這些密鑰也應該獨立於字段名稱。 – 2013-02-13 12:35:10

回答

0

Symfony Serializer Component爲這兩個問題提供了一個答案。它調用從對象到數組「標準化」和反向「非標準化」的步驟。

對於構建「反序列化器」或「反常化器」,我發現創建一個非常有用的抽象工廠。它解決了構建問題,並可以讓用戶甚至不知道他們正在使用哪種精確的解串器。其中一個例子是this deserializer factory,它基於Serialization component