我使用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 doc),但没有成功......
<?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;
}
但反序列化仍然失败。此外,该过程发生在命令类中,因此我没有任何错误消息......因此调试非常困难
答案 0 :(得分:0)
您已为单个属性添加了多个映射。
您应该将每个列表映射到单独的属性:
/**
* @XmlRoot("parent_property")
*/
class ParentProperty
{
/**
* @XmlList(inline = true, entry = "child_property_1")
*/
$childProperty1;
/**
* @XmlList(inline = true, entry = "child_property_2")
*/
$childProperty2;
}