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

的 属性

祝你好运!