JMS Serializer: how to use camel case for properties

后端 未结 4 1647
广开言路
广开言路 2021-01-12 00:20

I\'m using FOS Rest bundle and JMS Serializer to create a REST Api. The problem is I would like to keep the property names in the JSON response camel cased instead of using

相关标签:
4条回答
  • 2021-01-12 00:47

    Having upgraded jms/serilizer-bundle from 1.1 to 2.2 the parameter hack described above did not work. You can override the service definition as follows:

    #app/config/services.yml
    services:
        ....
        jms_serializer.serialized_name_annotation_strategy:
            class: JMS\Serializer\Naming\SerializedNameAnnotationStrategy
            arguments:
                - '@jms_serializer.identical_property_naming_strategy'
    
    0 讨论(0)
  • 2021-01-12 00:57

    I had to add the following to parameters.yml instead of config.yml:

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

    0 讨论(0)
  • 2021-01-12 01:08

    I found a way to do it but it's not the best way I think, there's an annotation SerializedName wich allows you to override the property serialization. The problem is that you have to do it one by one on every property with camel case, here's the documentation: YAML: http://jmsyst.com/libs/serializer/master/reference/yml_reference Annotation: http://jmsyst.com/libs/serializer/master/reference/annotations#serializedname

    0 讨论(0)
  • 2021-01-12 01:10

    I found a way to do it globally, if you want to keep the property names as is you need to use the IdenticalPropertyNamingStrategy

    There are several ways to accomplish this, first by changing the config(Thanks @Phantom):

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

    Second, you could override the default alias for this

    services:
        jms_serializer.naming_strategy:
            alias: jms_serializer.identical_property_naming_strategy
    

    The bundle defines these https://github.com/schmittjoh/JMSSerializerBundle/blob/master/Resources/config/services.xml so you should be able to override them

    Another way to do it is when you initialize the builder:

    $serializebuilder = JMS\Serializer\SerializerBuilder::create();
    $serializebuilder->setPropertyNamingStrategy(new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy());
    $serializer = $serializebuilder->build();
    
    0 讨论(0)
提交回复
热议问题