繁体   English   中英

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

[英]Symfony Serializer doesn't convert an array of objects from camelCase to snake_case

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

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

下面是我的代码。

应用程序/配置/config.yml

 framework: 
  serializer:  
    enabled: true
    name_converter: 'serializer.name_converter.camel_case_to_snake_case'

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

 services:
    get_set_method_normalizer:
        class:Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
        public: true
        tags: [serializer.normalizer]

人员.php

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

     //setters and getters
}

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

对于 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 中的“服务”部分。

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

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_case_to_snake_case添加别名更容易

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM