2015-02-06 54 views
1

我使用jms序列化程序包将xml反序列化到我的sf2项目中的对象中。我并没有创造我的所有型号的任何问题,直到我来补充这个领域:JMS串行器 - 反序列化xml中的非经常性节点结构

<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

你是否尝试过注释两个单独的属性而不是单个属性? – 2015-02-06 19:34:11

+0

你是什么意思?我必须先描述父母的财产,对吗? – 2015-02-07 20:31:07

回答

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

+0

好吧,我明白了,我会在明天测试它,我会告诉你:D – 2015-02-08 10:53:10

+0

我试过了,但仍然失败,我更新了我的问题:) – 2015-02-09 10:39:26

+0

您需要提供错误消息或完整的代码示例如果你不能自己调试它,并且仍然想获得帮助;) – 2015-02-09 11:15:23