【发布时间】:2017-03-14 09:06:54
【问题描述】:
我需要将以下 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) {
}
}
所以有两个问题:
- 它不会反序列化内联 XML 列表(项目)
- 它不会反序列化“元数据”项
任何想法如何使其在处理程序中不进行手动反序列化的情况下工作?如果仅使用适当的注释似乎不可能,那么任何如何在自定义处理程序中正确执行此操作的想法都将不胜感激。 顺便说一句,从对象到 XML 的序列化工作正常并生成正确的结构。
Symfony 3.2.4,JMSSerializerBundle 1.1,缓存清空,无法修改原XML格式。
【问题讨论】:
-
使用@MaxDepth() 注释。
-
@MathieuDormeval,没有任何区别:(
标签: symfony jmsserializerbundle jms-serializer