Php Symfony序列化程序不';t将对象数组从camelCase转换为snake_case

Php Symfony序列化程序不';t将对象数组从camelCase转换为snake_case,php,json,symfony,serialization,Php,Json,Symfony,Serialization,有人能帮我吗? 我试图使用Symfony序列化程序将一个对象序列化为json,它确实将对象转换为json,但它不会将对象数组从camelCase转换为snake\u case Im当前使用Symfony 3.3的默认序列化程序 下面是我的代码 app/config/config.yml app/config/services.yml Persons.php class Person{ private $firstName; private $lastName; pr

有人能帮我吗? 我试图使用Symfony序列化程序将一个对象序列化为json,它确实将对象转换为json,但它不会将对象数组从camelCase转换为snake\u case

Im当前使用Symfony 3.3的默认序列化程序

下面是我的代码

app/config/config.yml app/config/services.yml Persons.php

class Person{
     private $firstName;
     private $lastName;
     private $email;

     //setters and getters
}
PersonController.php

class PersonController extends Controller {
     /**
      * @Route("api/person")
      * @Method("POST")
      */
     public function person(){
         $person = new Person();
          $person->setFirstName("test");
          $person->setLastName("test");
          $person->setEmail("test@test.com");

         $person1 = new Person();
         $person1->setFirstName("test 1");
          $person1->setLastName("test 1");
          $person1->setEmail("test1@test.com");
         $arr = array($person, $person1);
         $serializer = $this->get("serializer");
         return new Response($serializer->serialize($arr,"json"));
     }

}
下面是电流输出

[
  {
     "firstName":"test",
     "lastName":"test"
     "email":"test@test.com"
  },
  {
     "firstName":"test 1",
     "lastName":"test 1"
     "email":"test@test.com"
  }
]
预期产出将是:

 [
   {
      "first_name":"test",
      "last_name":"test",
      "email":"test@test.com"
   },
   {
      "first_name":"test 1",
      "last_name":"test 1",
      "email":"test1@test.com"
   }
]

尝试显式传递服务的参数:

get_set_method_normalizer:
        class:Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
        public: true
        arguments: ['@serializer.mapping.class_metadata_factory', '@serializer.name_converter.camel_case_to_snake_case']
        tags: [serializer.normalizer]

camel\u case\u的别名添加到\u snake\u case

services:
    ...
    Symfony\Component\Serializer\NameConverter\NameConverterInterface: '@serializer.name_converter.camel_case_to_snake_case'

对于symfony 4,这对我来说很有用:

Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
    public: true
    arguments: ['@serializer.mapping.class_metadata_factory', '@serializer.name_converter.camel_case_to_snake_case']
    tags: [serializer.normalizer]

将该代码放入app/config/services.yaml中的“服务”部分。

使用上面的代码,我可以在我的机器上获得预期的输出。你确定你清除了缓存?你能发布使用声明吗?我在Symfony 4上也有同样的问题。我放弃了,转而使用Jms序列化程序。
services:
    ...
    Symfony\Component\Serializer\NameConverter\NameConverterInterface: '@serializer.name_converter.camel_case_to_snake_case'
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer:
    public: true
    arguments: ['@serializer.mapping.class_metadata_factory', '@serializer.name_converter.camel_case_to_snake_case']
    tags: [serializer.normalizer]