我想将 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/