Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JMS序列化程序、反序列化和xpath_Php_Symfony_Php 7_Jmsserializerbundle_Jms Serializer - Fatal编程技术网

Php JMS序列化程序、反序列化和xpath

Php JMS序列化程序、反序列化和xpath,php,symfony,php-7,jmsserializerbundle,jms-serializer,Php,Symfony,Php 7,Jmsserializerbundle,Jms Serializer,因此,我有一个示例XML: <a> <bb> <b><c>bc1</c></b> <b><c>bc2</c></b> <b><c>bc3</c></b> </bb> <cc> <bb>

因此,我有一个示例XML:

<a>
    <bb>
        <b><c>bc1</c></b>
        <b><c>bc2</c></b>
        <b><c>bc3</c></b>
    </bb>
    <cc>
        <bb>
            <b><c>cbc1</c></b>
            <b><c>cbc2</c></b>
            <b><c>cbc3</c></b>
        </bb>
    </cc>
</a>
问题是在对xml进行反序列化之后

    $object = $this->serializer->deserialize($xml, A::class, 'xml');
我得到了属性bb如我所料的水合,但是属性cc是空的


问题是,是否有任何方法可以在没有中间类/实体的情况下填充该字段?

是的,可以通过类似的方式完成,即在反序列化开始之前修改解析的XML数据。在这里,您可以使用
pre_反序列化
侦听器移动
cc/bb
成为
a
的直接后代,例如名为
ccbb
,并将
$a
的注释更改为
@JMS\SerializedName(“ccbb”)

然而,与上面链接的另一个问题有一个痛苦的区别:虽然使用SimpleXML添加包含文本内容的简单元素很容易,但在元素子树中移动很容易

final class B {
    /**
     * @var string
     *
     * @ORM\Column(type="string", length=24)
     * @JMS\Type("string")
     * @JMS\SerializedName("c")
     */
    private $c;
}
    $object = $this->serializer->deserialize($xml, A::class, 'xml');