首页 > 解决方案 > 如何使用 JMS 序列化器反序列化具有未知属性的 json?

问题描述

我正在尝试创建 DTO,这将帮助我反序列化嵌套的 JSON。我知道 JSON 的结构,但在某些嵌套步骤中,我不知道 JSON 属性的名称/索引。

JSON 看起来像:

{
  "project": {
    "layer": {
      "480x960": [],
      "720x360": [],
      "...": [],
      "...": []
    }
  }
}

但我不知道图层属性中的属性名称。

到目前为止,我有一些 DTO

项目 DTO:

namespace App\DTO;

use JMS\Serializer\Annotation as Serializer;

class Project
{
    /**
     * @var Layer
     *
     * @Serializer\Type("App\DTO\Layer")
     */
    protected $layer;
}

层 DTO:(我坚持)

namespace App\DTO;

use Doctrine\Common\Collections\Collection;
use JMS\Serializer\Annotation as Serializer;

class Layer
{
    // ???
}

我寻求实现类似的目标:$project->getLayer()将返回 Collection of objects ['480x960', '720x360', '...', etc.]。我不费心将那些未知属性的名称/索引保留在layer中。

标签: phpjsonsymfonyjms

解决方案


尝试这个。您不需要图层类。

use JMS\Serializer\Annotation as Serializer;

class Project
{
    /**
     * @Serializer\Type("array<string, array>")
     */
    protected $layer;
}

检查http://www.inanzzz.com/index.php/post/vsb9/mapping-random-json-and-xml-request-properties-with-jmsserializerbundle-in-symfony


推荐阅读