JMSerializerbundle: десериализовать дочерние узлы с разными именами

У меня есть xml, как это:

<screen>
<text id="qs65d4"></text>
<image id="xcq789"></image>
<text id="9s8xdf7"></text>
<button id="q6sd47"></button>
</screen>

Мне нужно десериализовать его и получить массив «экранных объектов», вот что я попробовал:

class Screen {
/**
* @Type("array<string, MyBundle\Entity\ScreenObject>")
* @XmlList(entry = "*")
*/
protected $objects;

}

И мой класс ScreenObject

/**
* @Discriminator(field = "type", map = {
*    "text": "MyBundle\Entity\ScreenObjects\Text",
*    "image": "MyBundle\Entity\ScreenObjects\Image",
*    "button": "MyBundle\Entity\ScreenObjects\Button"* })
*/
class ScreenObject {
/**
* @Type("string")
*/
protected $id;
}class Text extends ScreenObject{
/**
* @Type("string")
* @XmlAttribute
*/
protected $id;

public function getType() {
return 'text';
}

}
...

Я знаю подстановочный знак @XmlList (entry = ««) * немного опасно, но я не могу найти свое решение в документации JMS.

Спасибо за помощь.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]