2016-05-26 10 views
2

Ich habe eine Klasse, die nur als Container für ein Array verwendet wird.JMS Serializer kann Objekt nicht zu Array serialisieren

Ich möchte diese Klasse mit dem JMS \ Serializer serialisieren, um nur das Array zu enthalten, das es enthält. Um das zu tun, verwende ich eine spezielle Behandlungsfunktion:

use JMS\Serializer\Annotation\HandlerCallback; 

class Container { 
    // ... 

    /** 
    * @HandlerCallback("json", direction = "serialization") 
    */ 
    public function serializeToJson() { 
     return $this->things; 
    } 
} 

Nun, wenn ich

$container = new Container(); 
$container->addThing('something'); // optional 
print_r($serializer->serialize($container, 'json')); 

meine Erwartung ausgeführt ist, dass ich

[ 
    'something' 
] 

bekommen, aber was ich tun ist null. Ich habe das Problem gemeldet here, aber kennt jemand eine Abhilfe für dieses Problem? Wie soll ich dieses Problem angehen (ohne oder eine andere Idee zu verwenden), damit ich das gewünschte Ergebnis bekomme?

Danke!

Antwort

0

Versuchen Sie, die Besucher Objekt als Methodenargumente wie folgt bestanden mit:

/** @HandlerCallback("json", direction = "serialization") */ 
public function serializeToJson(JsonSerializationVisitor $visitor) 
{ 
    $visitor->addData($this->things); 
} 

Hope this Hilfe

+1

Soweit ich sehen kann, 'addData()' nimmt zwei Parameter und fügt ein assoziatives Array im $ Besucher. Ich möchte das '$ dings'-Array alleine zurückgeben, das nicht in einem anderen Array enthalten ist. Wie auch immer, ich habe es versucht und es wirft einen Fehler auf der Suche nach dem zweiten Argument. Wenn ich einen Schlüssel vor '$ this-> things' platziere, ist das Serialisierungsergebnis immer noch 'null'. – tetele

+0

Hallo @tetele Sie haben Recht, die richtige Signatur ist 'addData ($ key, $ value)' 'haben Sie versucht mit etwas wie $ $ visitor-> addData ('dings', $ this-> things);'? Ansonsten kannst du es auch mit '$ visitor-> setRoot ($ this-> things);' versuchen – Matteo