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

pet*_*ner 7 serialization symfony fosrestbundle jmsserializerbundle

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

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

我看到配置中有一个选项可以禁用小写并删除_,但随后它变为EmployeeIdentifier.

有没有什么方法JMS Serializer保留属性的原始名称?提前致谢

Cha*_*ase 33

我找到了一种全局的方法,如果你想保留你需要使用的属性名称 IdenticalPropertyNamingStrategy

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

#config.yml
jms_serializer:
    property_naming: 
        id: 'jms_serializer.identical_property_naming_strategy'
Run Code Online (Sandbox Code Playgroud)

其次,您可以覆盖此默认别名

services:
    jms_serializer.naming_strategy:
        alias: jms_serializer.identical_property_naming_strategy
Run Code Online (Sandbox Code Playgroud)

该软件包定义了这些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();
Run Code Online (Sandbox Code Playgroud)

  • 添加到 SF4 中的 `config > packages > jms_serializer.yaml`;似乎不起作用 (3认同)

小智 5

将 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'
Run Code Online (Sandbox Code Playgroud)