JMS 序列化程序 - 反序列化 xml 中的非循环节点结构
JMS Serializer - deserialize a non-recurrent node structure in xml
我使用 jms 序列化程序包将 xml 反序列化为我的 sf2 项目中的对象。在我必须添加此字段之前,我创建所有模型都没有任何问题:
<parent_property>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_2>
<![CDATA[ value ]]>
</child_property_2>
</parentProperty>
但是这个模式不是循环的,child_property_1 或 child_property_2 的出现次数可以改变。
我尝试了很多东西(使用 jms 文档)但没有成功...
<?php
/**
* @Serializer\XmlList(inline = true, entry = "child_property_1")
* @Serializer\XmlList(inline = true, entry = "child_property_2")
*/
public $parentProperty;
?>
编辑:
所以我尝试了 Jakub Zalas 的回答:
MainEntity.php
/**
* @Serializer\Type("My\Bundle\Api\Model\ParentProperty")
*/
public $parentProperty;
ParentProperty.php
/**
* @Serializer\XmlRoot("parent_property")
*/
class ParentProperty
{
/**
* @Serializer\XmlList(inline = true, entry = "child_property_1")
*/
$childProperty1;
/**
* @Serializer\XmlList(inline = true, entry = "child_property_2")
*/
$childProperty2;
}
但是反序列化仍然失败。此外,该过程发生在命令 class 中,所以我没有任何错误消息...因此很难调试
您已将多个映射添加到单个 属性。
您应该将每个列表映射到单独的 属性:
/**
* @XmlRoot("parent_property")
*/
class ParentProperty
{
/**
* @XmlList(inline = true, entry = "child_property_1")
*/
$childProperty1;
/**
* @XmlList(inline = true, entry = "child_property_2")
*/
$childProperty2;
}
我使用 jms 序列化程序包将 xml 反序列化为我的 sf2 项目中的对象。在我必须添加此字段之前,我创建所有模型都没有任何问题:
<parent_property>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_1>
<![CDATA[ value ]]>
</child_property_1>
<child_property_2>
<![CDATA[ value ]]>
</child_property_2>
</parentProperty>
但是这个模式不是循环的,child_property_1 或 child_property_2 的出现次数可以改变。
我尝试了很多东西(使用 jms 文档)但没有成功...
<?php
/**
* @Serializer\XmlList(inline = true, entry = "child_property_1")
* @Serializer\XmlList(inline = true, entry = "child_property_2")
*/
public $parentProperty;
?>
编辑:
所以我尝试了 Jakub Zalas 的回答:
MainEntity.php
/**
* @Serializer\Type("My\Bundle\Api\Model\ParentProperty")
*/
public $parentProperty;
ParentProperty.php
/**
* @Serializer\XmlRoot("parent_property")
*/
class ParentProperty
{
/**
* @Serializer\XmlList(inline = true, entry = "child_property_1")
*/
$childProperty1;
/**
* @Serializer\XmlList(inline = true, entry = "child_property_2")
*/
$childProperty2;
}
但是反序列化仍然失败。此外,该过程发生在命令 class 中,所以我没有任何错误消息...因此很难调试
您已将多个映射添加到单个 属性。
您应该将每个列表映射到单独的 属性:
/**
* @XmlRoot("parent_property")
*/
class ParentProperty
{
/**
* @XmlList(inline = true, entry = "child_property_1")
*/
$childProperty1;
/**
* @XmlList(inline = true, entry = "child_property_2")
*/
$childProperty2;
}