JMS Serializer - 反序列化xml中的非循环节点结构

时间:2015-02-06 15:58:54

标签: symfony xml-deserialization jmsserializerbundle

我使用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;
}

但反序列化仍然失败。此外,该过程发生在命令类中,因此我没有任何错误消息......因此调试非常困难

1 个答案:

答案 0 :(得分:0)

您已为单个属性添加了多个映射。

您应该将每个列表映射到单独的属性:

/** 
 * @XmlRoot("parent_property")
 */
class ParentProperty
{
    /**
     * @XmlList(inline = true, entry = "child_property_1")
     */
    $childProperty1;

    /**
     * @XmlList(inline = true, entry = "child_property_2")
     */
    $childProperty2;
}

请参阅the docs of JMSSerializer