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
相关产品推荐
相关产品推荐

