Php Symfony序列化程序不';t将对象数组从camelCase转换为snake_case
有人能帮我吗? 我试图使用Symfony序列化程序将一个对象序列化为json,它确实将对象转换为json,但它不会将对象数组从camelCase转换为snake\u case Im当前使用Symfony 3.3的默认序列化程序 下面是我的代码 app/config/config.yml app/config/services.yml Persons.phpPhp 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
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]