JMS 序列化器 SerializedName() 不工作
JMS Serializer SerializedName() not working
我的实体 Foo 中有一个 $ 字符 属性。
属性 本身就是一个实体 (AppBundle\Entity\Character)。
当我序列化 Foo 时,我不想序列化整个实体角色:我只需要角色的昵称。
我在AppBundle\Entity\Foo中写了这个:
/**
*
* @Serializer\VirtualProperty()
* @Serializer\SerializedName("character")
*/
public function getCharacterNickname()
{
return $this->character->getNickname();
}
“虚拟 属性”注释有效。
但是“serializedName”没有,因为结果如下:
{
"id": 18,
"characterNickname": "Mr.Gilbert Norrel",
"foo": "foo",
"bar": true,
"baz": "baz"
}
("characterNickname" 而不是 "character",正如我在注释中所问的那样)。
属性 "id"、"foo"、"bar" 和 "baz" 具有注释 @Serializer\Expose( ). 属性 "character" 没有(因为我想通过 VirtualProperty 序列化 属性)
我错过了什么?
是不是因为我想用已有的属性的名字序列化属性?
太:)
找到解决方案:
https://github.com/schmittjoh/serializer/issues/334
库的 IdenticalPropertyNamingStrategy 文件似乎有错误。
对于那些使用 symfony 3 和那些 jms 版本的人:
//composer.json
"jms/serializer-bundle": "2.4.4",
"jms/serializer": "1.10.0",
"jms/metadata": "1.7.0",
"jms/parser-lib": "1.0.0"
我遇到了同样的问题,但有一个简单的解决方案。
让我们先从一个不起作用的例子开始:
/**
* @Serializer\VirtualProperty
* @Serializer\SerializedName("myFirstName")
* @Serializer\Groups({"book:primitives"})
*/
public function firstName()
{
return ($this->getAuthor() !== null) ? $this->getAuthor()->getFirstname() : '';
}
即使给出了 @SerializedName,返回的 json 的名称为 属性 和函数的名称。
为了使 jms 考虑 @SerializedName,由于 jms 约定命名方法,虚拟 属性 函数名称必须以 get 像 getFirstName 、 getLastName 等...
/**
* @Serializer\VirtualProperty
* @Serializer\SerializedName("myFirstName")
* @Serializer\Groups({"book:primitives"})
*/
public function getFirstName()
{
return ($this->getAuthor() !== null) ? $this->getAuthor()->getFirstname() : '';
}
然后,您的 json 将包含名为 myFirstName
的 属性
祝你好运!
我的实体 Foo 中有一个 $ 字符 属性。
属性 本身就是一个实体 (AppBundle\Entity\Character)。
当我序列化 Foo 时,我不想序列化整个实体角色:我只需要角色的昵称。
我在AppBundle\Entity\Foo中写了这个:
/**
*
* @Serializer\VirtualProperty()
* @Serializer\SerializedName("character")
*/
public function getCharacterNickname()
{
return $this->character->getNickname();
}
“虚拟 属性”注释有效。
但是“serializedName”没有,因为结果如下:
{
"id": 18,
"characterNickname": "Mr.Gilbert Norrel",
"foo": "foo",
"bar": true,
"baz": "baz"
}
("characterNickname" 而不是 "character",正如我在注释中所问的那样)。
属性 "id"、"foo"、"bar" 和 "baz" 具有注释 @Serializer\Expose( ). 属性 "character" 没有(因为我想通过 VirtualProperty 序列化 属性)
我错过了什么? 是不是因为我想用已有的属性的名字序列化属性?
太:)
找到解决方案:
https://github.com/schmittjoh/serializer/issues/334
库的 IdenticalPropertyNamingStrategy 文件似乎有错误。
对于那些使用 symfony 3 和那些 jms 版本的人:
//composer.json
"jms/serializer-bundle": "2.4.4",
"jms/serializer": "1.10.0",
"jms/metadata": "1.7.0",
"jms/parser-lib": "1.0.0"
我遇到了同样的问题,但有一个简单的解决方案。
让我们先从一个不起作用的例子开始:
/**
* @Serializer\VirtualProperty
* @Serializer\SerializedName("myFirstName")
* @Serializer\Groups({"book:primitives"})
*/
public function firstName()
{
return ($this->getAuthor() !== null) ? $this->getAuthor()->getFirstname() : '';
}
即使给出了 @SerializedName,返回的 json 的名称为 属性 和函数的名称。
为了使 jms 考虑 @SerializedName,由于 jms 约定命名方法,虚拟 属性 函数名称必须以 get 像 getFirstName 、 getLastName 等...
/**
* @Serializer\VirtualProperty
* @Serializer\SerializedName("myFirstName")
* @Serializer\Groups({"book:primitives"})
*/
public function getFirstName()
{
return ($this->getAuthor() !== null) ? $this->getAuthor()->getFirstname() : '';
}
然后,您的 json 将包含名为 myFirstName
的 属性祝你好运!