2

テーブル、行、セルを表すデータ構造があります。JSON と XML にシリアル化および逆シリアル化する必要があります。この種のオブジェクトをシリアライズするように JMS シリアライザーを構成するにはどうすればよいですか?

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 での逆シリアル化では機能しません。行は空です。

4

1 に答える 1

0

最後に、行ごとに個別のオブジェクトを使用して、オブジェクトを (逆) シリアル化することができました。

私のマッピングは次のようになります。

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 シリアライザーを使用してオブジェクトをシリアライズします。

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

于 2015-10-28T21:00:14.247 に答える