JMS序列化器:如何将骆驼盒用于属性



我正在使用FOS REST BUNDLE和JMS SERIALISER创建REST API。问题是我想将属性名称保存在JSON响应中,而不是使用_。

例如,我有一个称为员工Identionfier的属性,默认情况下,它将转换为雇员。

我看到配置中有一个选项可以禁用小写并摆脱_,但随后变成了员工。

有什么方法可以使JMS Serializer保留该属性的原始名称?预先感谢

我找到了一种在全球范围内完成的方法,如果您要保留属性名称,请按照IdenticalPropertyNamingStrategy

进行属性名称

有几种方法可以完成此操作,首先通过更改配置(感谢@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/master/resources/config/services.xml,因此您应该能够覆盖它们

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

$serializebuilder = JMSSerializerSerializerBuilder::create();
$serializebuilder->setPropertyNamingStrategy(new JMSSerializerNamingIdenticalPropertyNamingStrategy());
$serializer = $serializebuilder->build();

将JMS/serilizer-Bundle从1.1升级到2.2 2.2上述参数黑客无效。您可以按以下方式覆盖服务定义:

#app/config/services.yml
services:
    ....
    jms_serializer.serialized_name_annotation_strategy:
        class: JMSSerializerNamingSerializedNameAnnotationStrategy
        arguments:
            - '@jms_serializer.identical_property_naming_strategy'

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

我找到了一种方法,但这并不是我认为的最好方法,有一个注释序列化名称允许您覆盖属性序列化。问题在于,您必须用骆驼盒在每个物业上对每个属性进行一个逐个地进行,这是文档:YAML:http://jmsyst.com/libs/serializer/master/reference/yml_reference注释:http://jmsyst.com/libs/serializer/master/Reference/Refereniations#SerializedName

我必须添加以下内容。

jms_serializer.serialized_name_annotation_strategy.class: JMSSerializerNamingSerializedNameAnnotationStrategy

最新更新