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;
}

参见the docs of JMSSerializer