Php JMS序列化程序、反序列化和xpath
因此,我有一个示例XML: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>
<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');