У меня есть структура данных, которая представляет таблицу, строки и ячейки. Мне нужно сериализовать и десериализовать его в JSON и XML. Как я могу настроить JMS Serializer для сериализации такого типа объектов,
class Test {
public $data = [
'row_one' => ['cell-11', 'cell-12'],
'row_two' => ['cell-21', 'cell-22'],
];
}
В этот XML:
<result>
<data>
<row index="row_one">
<cell>cell-11</cell>
<cell>cell-12</cell>
</row>
<row index="row_two">
<cell>cell-21</cell>
<cell>cell-22</cell>
</row>
</data>
</result>
Я уже пытался использовать объект, который представляет собой строку с @Inline
аннотации, она не работает для десериализации в JSON, строки пусты.
Наконец мне удалось (де) сериализовать мой объект, используя отдельный объект для каждой строки.
Мое отображение выглядит так:
class Table
{
/**
* @\JMS\Serializer\Annotation\Inline
*/
private $rows = [];
public function __construct(array $rows)
{
$this->rows = $rows;
}
}
class Row
{
/**
* @\JMS\Serializer\Annotation\Inline
*/
private $values = [];
public function __construct(array $values)
{
$this->values = $values;
}
}
Затем я сериализую свой объект с помощью JMS Serializer:
echo $serializer->serialize(new Table([
new Row(['cell-11', 'cell-12']),
new Row(['cell-21', 'cell-22'])
]), 'json');
К сожалению, при таком подходе десериализация не работает из-за ошибки, которую я пытался исправить здесь — https://github.com/schmittjoh/serializer/pull/513
Других решений пока нет …