我使用Symfony和FOSRestBundle创建一个RESTful应用程序。 FOSRestBundle使用JMS Seriazlizer将数据序列化为json格式。我有一切都在处理一个小问题。
这是我的实体类
/**
* Post
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Tomalo\AdminBundle\Entity\PostRepository")
* @ExclusionPolicy("none")
*/
class Post
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="content", type="text")
* @Assert\NotBlank()
*/
private $content;
/**
* @var float
*
* @ORM\Column(name="lat", type="float")
* @Assert\NotBlank()
*/
private $lat;
/**
* @var float
*
* @ORM\Column(name="lon", type="float")
* @Assert\NotBlank()
*/
private $lon;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @var string
*
* @ORM\Column(name="sign", type="string", length=50, nullable=true)
* @Expose
*/
private $sign;
/**
* @var integer
*
* @ORM\Column(name="status", type="integer")
*/
private $status=0;
/**
* @var integer
*
* @ORM\Column(name="points", type="integer")
*/
private $points=0;
/**
* @var string
*
* @ORM\Column(name="uuid", type="string", length=43)
* @Assert\NotBlank()
* @Exclude
*/
private $uuid;
private $owner;
//get/set method continue
这是json我得到的:
{
"id": 5,
"content": "zxcvzxcvzxc",
"lat": 37.422005,
"lon": -122.084095,
"date": "2013-05-20T05:06:57+0100",
"status": 0,
"points": 0,
"owner": 0
}
在我的实体中,$ uuid是唯一具有@Exclude注释的属性,并且没有按预期存在,但也缺少$ sign属性。如你所见,我把@Expose注释放到$ sign但没有改变。我尝试使用@ExclusionPolicy(" all")并公开除了uuid之外的所有内容但我得到了
Warning: json_encode(): recursion detected in E:\workspace\htdocs\tomalo\vendor\jms\serializer\src\JMS\Serializer\JsonSerializationVisitor.php line 29
我找到了一些信息,因为它是php bug
知道什么是错的以及如何解决它?
答案 0 :(得分:9)
您可以将空值序列化为空字符串。猜猜它有点帮助你
$context = new SerializationContext();
$context->setSerializeNull(true);
$objectData = $serializer->serialize($object, 'json', $context);
对于FOSRestBundle,您可以在设置
中定义它fos_rest:
view:
serialize_null: true
答案 1 :(得分:7)
forgottenbas ' FOSRestBundle
的解决方案对我没用。我在这里找到了一个解决方案https://github.com/FriendsOfSymfony/FOSRestBundle/pull/480
在配置中使用serializer
部分,而不是view
:
fos_rest:
serializer:
serialize_null: true