gpt4 book ai didi

php - JMS 序列化程序。对象数组的 Xml 标记名称

转载 作者:行者123 更新时间:2023-12-05 04:10:56 25 4
gpt4 key购买 nike

我在使用 jms 序列化程序和 symfony 3 获取我期望的 xml 输出时遇到了一些麻烦。

我有一个名为“reference”的实体。使用注解@XmlRoot("reference") 并只返回一个对象,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,因为我没有持有引用项目的父实体...)

谢谢!

最佳答案

首先,我认为您期望的 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"
}
]
}

关于php - JMS 序列化程序。对象数组的 Xml 标记名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com