我在使用jms序列化程序和symfony 3获得xml输出时遇到了一些麻烦。
我有一个名为" reference"的实体。 使用注释@XmlRoot("引用")并仅返回一个对象,fos rest bundle的xml输出符合预期:
<reference>
<id>1</id>
<title>Title 1</title>
</reference>
但是如果我输出相同对象的数组(由doctrines findAll()
方法返回),我得到这个:
<result>
<entry>
<id>1</id>
<title>Title 1</title>
</entry>
<entry>
<id>2</id>
<title>Title 2</title>
</entry>
<entry>
<id>3/id>
<title>Title 3</title>
</entry>
</result>
标记名为<entry>
,但我想实现此目的:
<result>
<reference>
<id>1</id>
<title>Title 1</title>
</reference>
<reference>
<id>2</id>
<title>Title 2</title>
</reference>
<reference>
<id>3/id>
<title>Title 3</title>
</reference>
</result>
(在这种情况下,我不知道如何使用@XmlList
,因为我没有父实体持有参考项......)
谢谢!
答案 0 :(得分:1)
首先,您预期的XML格式不适合我。 id
应该是一个属性。下面的例子就是这样。查看底部的结果。如果您想要更多示例,请查看下面的链接,这些链接可以为您提供很多帮助。
<强>结果强>
namespace Application/YourBundle/Model;
use Application/YourBundle/Model/Reference;
use JMS\Serializer\Annotation as Serializer;
/**
* @Serializer\XmlRoot("result")
*/
class Result
{
/**
* @var Reference[]
*
* @Assert\Valid(traverse="true")
*
* @Serializer\XmlList(inline=false, entry="reference")
* @Serializer\Type("array<Application\YourBundle\Model\Reference>")
*/
public $references = [];
}
<强>参考强>
namespace Application/YourBundle/Model;
use JMS\Serializer\Annotation as Serializer;
class Reference
{
/**
* @var int
*
* @Serializer\Type("integer")
* @Serializer\XmlAttribute
*/
public $id;
/**
* @var string
*
* @Serializer\Type("string")
* @Serializer\XmlValue
*/
public $title;
}
此设置应该为您提供:
<result>
<references>
<reference id="1">Title 1</reference>
<reference id="2">Title 2</reference>
<reference id="3">Title 3</reference>
</references>
</result>
如果你的回复是一个json对象,那么就像这样:
{
"references": [
{
"id": 1,
"title": "Title 1"
},
{
"id": 2,
"value": "Title 2"
},
{
"id": 3,
"value": "Title 3"
}
]
}