9

我用 Symfony 和 FOSRestBundle 制作了一个 RESTful 应用程序。FOSRestBundle 使用 JMS Serializer 将数据序列化为 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 错误

知道出了什么问题以及如何解决吗?

4

2 回答 2

9

您可以将空值序列化为空字符串。猜猜对你有点帮助

$context = new SerializationContext();
$context->setSerializeNull(true);
$objectData = $serializer->serialize($object, 'json', $context);

对于 FOSRestBundle,您可以在设置中定义它

fos_rest:
    view:
        serialize_null: true
于 2013-05-23T08:33:50.310 回答
7

被遗忘的巴斯的解决方案对FOSRestBundle我不起作用。我在这里找到了解决方案https://github.com/FriendsOfSymfony/FOSRestBundle/pull/480

在配置中使用serializer部分,而不是view

fos_rest:
    serializer:
        serialize_null: true
于 2014-07-02T08:56:30.653 回答