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

Symfony Serializer中SerializedName注解的方法序列化名称未生效

问题解决:Symfony Serializer 中 SerializedName 注解未生效

问题原因

你在初始化ObjectNormalizer时配置了全局的CamelCaseToSnakeCaseNameConverter,这个转换器会对所有属性/ getter方法的名称进行驼峰转蛇形处理,且默认优先级高于SerializedName注解,导致注解指定的名称被覆盖。

解决方案

通过SerializedNameAnnotationStrategy包装全局名称转换器,让序列化器优先使用SerializedName注解指定的名称,无注解时再沿用驼峰转蛇形规则。

步骤1:引入必要类

确保代码中引入SerializedNameAnnotationStrategy:

use Symfony\Component\Serializer\NameConverter\SerializedNameAnnotationStrategy;

步骤2:修改 Serializer 初始化代码

将原有的CamelCaseToSnakeCaseNameConverter用SerializedNameAnnotationStrategy包裹,修改后的ObjectNormalizer配置如下:

new ObjectNormalizer(
    classMetadataFactory: new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())),
    nameConverter: new SerializedNameAnnotationStrategy(new CamelCaseToSnakeCaseNameConverter()),
    propertyTypeExtractor: new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()])
),

额外检查

  • 确认注解命名空间正确:确保#[Serializer\SerializedName]中的Serializer是Symfony\Component\Serializer\Annotation的别名,或直接使用全类名#[Symfony\Component\Serializer\Annotation\SerializedName('rrule')]
  • 验证序列化调用时已正确传入分组参数(你已确认分组功能正常,此步可忽略)

完成以上修改后,getRruleRfcString方法会被序列化为"rrule" => null,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:44