You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Symfony Serializer进行XML序列化时如何正确分组数组

问题根因

Symfony序列化组件的XML编码器默认不会为对象的数组/集合类型属性自动生成外层包裹标签,会直接将集合内的子元素平铺到当前对象的节点下,这就是你当前输出缺少<products>包裹层的原因。

解决方案

有两种常用配置方式可以实现你需要的XML结构:

方式1:使用序列化注解(推荐,可复用性高)

  1. 首先确认config/packages/framework.yaml中开启了序列化注解支持:
framework:
    serializer:
        enable_annotations: true
  1. 给Ticket类的$products属性添加序列化注解:
use Symfony\Component\Serializer\Annotation\SerializedName;
use Symfony\Component\Serializer\Annotation\XmlCollection;

class Ticket {
    private string $uuid;

    /**
     * @var Product[]|array $products
     * @SerializedName("products")
     * @XmlCollection(entryName="product")
     */
    private array $products;
    
    // 原有getter、setter保持不变
}

配置完成后直接调用原有序列化方法即可输出符合预期的XML结构。

方式2:在序列化时传入上下文配置(适合单次使用场景)

如果不想修改实体类的注解,可以在调用序列化方法时通过上下文参数指定集合映射规则:

$this->serializer->serialize($data, 'xml', [
    'xml_encoding' => 'utf-8',
    'xml_collection_map' => [
        'products' => 'product'
    ]
]);

内容的提问来源于stack exchange,提问作者davrodrila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:39:00