symfony - 将 json 反序列化为实体数组

标签 symfony deserialization

我想将 JSON 反序列化为具有实体关系的对象。

传入 JSON 数据


    {
          "name": "john",
          "books": [
            {
              "title": "My life"
            }
          ]
    }

json反序列化的结果是这样的

$object = $this->get('serializer')->deserialize($jsonData, 'Author', 'json');

 Author { #name: 'john' #books: array:1 [ 0 => array:1 [ "title" => "My life" ] ] }

我想反序列化为这样的对象

Author { #name: 'john' #books: array:1 [ Book { "title" => "My life" } ] }

我明白为什么反序列化不能反序列化Book了。使用 JMSSerialzerBundle,Type 注释可以解决这种情况。

是否可以使用 Symfony Serializer 组件来完成此操作,还是必须使用 JMSSerializer?

感谢您的帮助;)

我的对象


class Author

    {
        private $name;

        private $books;

        /**
         * @return mixed
         */
        public function getName()
        {
            return $this->name;
        }

        /**
         * @param mixed $name
         */
        public function setName($name)
        {
            $this->name = $name;
        }

        /**
         * @return mixed
         */
        public function getBooks()
        {
            return $this->books;
        }

        /**
         * @param mixed $books
         */
        public function setBooks(array $books)
        {
            $this->books = $books;
        }
    }

    class Book
    {
        private $title;

        private $author;

        /**
         * @return mixed
         */
        public function getTitle()
        {
            return $this->title;
        }

        /**
         * @param mixed $title
         */
        public function setTitle($title)
        {
            $this->title = $title;
        }

        /**
         * @return mixed
         */
        public function getAuthor()
        {
            return $this->author;
        }

        /**
         * @param mixed $author
         */
        public function setAuthor(Author $author)
        {
            $this->author = $author;
        }
    }

最佳答案

Guilhem 是对的,默认的 Symfony ObjectNormalizer 目前无法规范化非标量类型的属性。

但是,此功能正在 Symfony 3.1 中添加:https://github.com/symfony/symfony/pull/17660

同时,您可以将上面链接的 PR 中提供的 ObjectNormalizer 版本复制/粘贴到您的项目中。

您还可以查看API Platform中提供的类似实现。 :

关于symfony - 将 json 反序列化为实体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337200/

相关文章:

symfony - 在普通表单类上使用奏鸣曲字段类型

python - C++ 输出与 Python 不同的消息(从串口读取)

java - Gson - 根据字段值反序列化为特定对象类型

symfony - 当我尝试通过电子邮件向自己发送时事通讯问题时,为什么我的模板中的内联 css 过滤器会出现未知的过滤器错误?

mysql - SQL 子查询 IN SELECT [Symfony3]

mysql - Doctrine2 中从 n+1 到 n-1 的订购日期

Symfony2 使用包 :controller:action notation 在 kernelControllerEvent 中设置 Controller

java - 如何使用 xStream 反序列化多个对象

java - JSON数据反序列化

c# - 在 ASP.NET C# 中解析 json 文件