JMS Serializer:如何将camel case用于属性

时间:2017-04-20 20:26:52

标签: symfony serialization fosrestbundle jmsserializerbundle

我正在使用FOS Rest bundle和JMS Serializer来创建REST Api。问题是我想保留JSON响应中的属性名称,而不是使用_。

例如,我有一个名为employeeIdentifier的属性,默认情况下会转换为employee_identifier。

我看到配置中有一个选项可以禁用小写并删除_,但它会变成EmployeeIdentifier。

JMS Serializer是否有任何方法可以保留属性的原始名称?提前致谢

5 个答案:

答案 0 :(得分:27)

我找到了一种在全球范围内执行此操作的方法,如果您想保留属性名称,则需要使用IdenticalPropertyNamingStrategy

有几种方法可以实现这一点,首先通过更改配置(Thanks @Phantom):

#config.yml
jms_serializer:
    property_naming: 
        id: 'jms_serializer.identical_property_naming_strategy'

其次,您可以覆盖此

的默认别名
services:
    jms_serializer.naming_strategy:
        alias: jms_serializer.identical_property_naming_strategy

捆绑包定义了这些https://github.com/schmittjoh/JMSSerializerBundle/blob/master/Resources/config/services.xml,因此您应该可以覆盖它们

另一种方法是初始化构建器时:

$serializebuilder = JMS\Serializer\SerializerBuilder::create();
$serializebuilder->setPropertyNamingStrategy(new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy());
$serializer = $serializebuilder->build();

答案 1 :(得分:1)

已将jms / serilizer-bundle从1.1升级到2.2,上述参数hack不起作用。您可以按如下方式覆盖服务定义:

#app/config/services.yml
services:
    ....
    jms_serializer.serialized_name_annotation_strategy:
        class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy
        arguments:
            - '@jms_serializer.identical_property_naming_strategy'

答案 2 :(得分:1)

config/packages/jms_serializer.yaml 中使用此配置为我工作(Symfony 4.4 和 JMS ^3.8):

jms_serializer:
    property_naming:
        id: jms_serializer.identical_property_naming_strategy

并手动删除缓存

https://github.com/schmittjoh/serializer/issues/1037

答案 3 :(得分:0)

我找到了一种方法,但这不是我想的最好的方法,有一个注释SerializedName,它允许你覆盖属性序列化。问题是你必须在每个带有驼峰的属性上逐一进行,这里是文档: YAML:http://jmsyst.com/libs/serializer/master/reference/yml_reference 注释:http://jmsyst.com/libs/serializer/master/reference/annotations#serializedname

答案 4 :(得分:0)

我必须将以下内容添加到parameter.yml而不是config.yml:

jms_serializer.serialized_name_annotation_strategy.class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy