0
我需要反序列化下面的XML到一个对象图:JMS串行软件包:反序列化XML到嵌套对象
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result>
<success>true</success>
<item>
<id>1</id>
<name>foo</name>
</item>
<item>
<id>2</id>
<name>bar</name>
</item>
</result>
<metadata>
<key1>value1</key1>
<key2>value2</key2>
</metadata>
</response>
应该有3个连接的类:
class Response
{
/**
* @var Result
*
* @Serializer\Type("AcmeBundle\Model\Result")
*/
protected $result;
/**
* @var array
*
* @Serializer\Type("array<string, string>")
*/
protected $metadata;
}
,
class Result
{
/**
* @var boolean
*
* @Serializer\SerializedName("success")
* @Serializer\Type("boolean")
*/
protected $success;
/**
* @var Item[]
*
* @Serializer\SerializedName("item")
* @Serializer\Type("array<AcmeBundle\Model\Item>")
*/
protected $items = array();
}
,
class Item
{
/**
* @var int
*
* @Serializer\SerializedName("id")
* @Serializer\Type("integer")
*/
protected $id;
/**
* @var string
*
* @Serializer\SerializedName("name")
* @Serializer\Type("string")
*/
protected $name;
}
当我尝试反序列化,我得到以下结果:
var_dump($serializer->deserialize($xml, Response::class, 'xml'));
:
object(AcmeBundle\Model\Response)#918 (2) {
["result":protected]=>
object(AcmeBundle\Model\Result)#933 (2) {
["success":protected]=>
bool(true)
["items":protected]=>
array(0) {
}
}
["metadata":protected]=>
array(0) {
}
}
因此,有2个问题:
- 它不反序列化内嵌XML列表(项目)
- 它不反序列化“元数据”项目
任何想法如何使它在没有手动反序列化的情况下工作?如果仅仅使用适当的注释似乎是不可能的,任何想法如何在自定义处理程序中正确地做到这一点将非常感激。 顺便说一句,从对象到XML的序列化工作正常,并生成适当的结构。
Symfony 3.2.4,JMSSerializerBundle 1.1,缓存清晰,原始的XML格式不能修改。
使用@MaxDepth()注释。 –
@MathieuDormeval,它没有任何区别:( –
看看https://github.com/schmittjoh/serializer/issues/522 –