php - 如何在 Symfony Serializer 中反序列化对象数组?

标签 php symfony serialization

Symfony Serializer 中是否可以反序列化属性中的对象数组?我有一个 Boss 类,它的 $Npc = [] 属性需要保存一个 Npc 对象数组。我确实在文档中看到了一些示例,但它们没有说明此功能。我有一个带有 NPC 数组的 json 字符串例如:

class Boss {

    private $Npc = [];    

    /**
    * @return Npc[]
    */
    public function getNpcs(): array
    {
        return $this->npcs;
    }
}

我正在使用 php7.1 和 symfony/serializer 版本 ^3.3。

编辑: 我已经尝试过 PhpDocExtractor,但它不允许我安装它。 :(

编辑: 这是一个可能的 JSON 值:

{
    "bossname": "Epic boss!",
    "npcs": [{
        "id": 24723,
        "name": "Selin Fireheart",
        "urlSlug": "selin-fireheart",
        "creatureDisplayId": 22642
    }]
}

最佳答案

我找到了一种方法来做到这一点 :)。我通过 Composer 安装了 Symfony PropertyAccess 包。使用此软件包,您可以添加加法器、去除器和干扰器。这样 Symfony Serializer 会自动用正确的对象填充数组。 示例:

private $npcs = [];

public function addNpc(Npc $npc): void
{
    $this->npcs[] = $npc;
}

public function hasNpcs(): bool
{
    return count($this->npcs) > 0
}

等等

通过这种方式,您可以将 ObjectNormalizer 用于:

$normalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor());

编辑:至少从 v3.4 开始,您还必须创建一个移除方法。否则它将无法工作(没有错误或警告)。

关于php - 如何在 Symfony Serializer 中反序列化对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47273427/

相关文章:

Linux 的 C++ 对象序列化

javascript - 如何忽略在 MVC View 中检测到的自引用循环?

c++ - 结构破坏中的奇怪行为

javascript - 通过 jQuery AJAX POST 发送 JavaScript 数组

php - WordPress 不执行 mysql_query()

php - 如果此人存在则 MySQL 更新

laravel - 如何像格式化数组一样使用 monolog 记录多行条目?

php - 未知列 '' 值 '' in ' 字段列表'

events - Symfony2 在服务创建之后但在 Controller 之前触发的事件

php - Symfony 分析器 : show response content?