Symfony Serializer 不会将对象数组从camelCase 转换为snake_case

bli*_*n12 5 php serialization json symfony

有人可以帮我弄这个吗?我正在尝试使用 Symfony Serializer 将对象序列化为 json,它确实将对象转换为 json,但它不会将对象数组从驼峰式大小写转换为蛇形大小写。

我目前在 Symfony 3.3 中使用默认的序列化程序

下面是我的代码。

应用程序/配置/config.yml

 framework: 
  serializer:  
    enabled: true
    name_converter: 'serializer.name_converter.camel_case_to_snake_case'
Run Code Online (Sandbox Code Playgroud)

应用程序/配置/服务.yml

 services:
    get_set_method_normalizer:
        class:Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
        public: true
        tags: [serializer.normalizer]
Run Code Online (Sandbox Code Playgroud)

人员.php

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

     //setters and getters
}
Run Code Online (Sandbox Code Playgroud)

个人控制器.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"));
     }

}
Run Code Online (Sandbox Code Playgroud)

下面是当前的输出。

[
  {
     "firstName":"test",
     "lastName":"test"
     "email":"test@test.com"
  },
  {
     "firstName":"test 1",
     "lastName":"test 1"
     "email":"test@test.com"
  }
]
Run Code Online (Sandbox Code Playgroud)

预期输出将是:

 [
   {
      "first_name":"test",
      "last_name":"test",
      "email":"test@test.com"
   },
   {
      "first_name":"test 1",
      "last_name":"test 1",
      "email":"test1@test.com"
   }
]
Run Code Online (Sandbox Code Playgroud)

小智 2

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

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