7

我正在尝试用 Symfony 2.1 中的嵌入式文档序列化 MongoDB 文档。我正在使用 JMSserializer 和 Mongodb-odm 包。

我有以下文档实体。

// Blog

namespace App\DocumentBundle\Document;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use JMS\SerializerBundle\Annotation\Type;

/**
 * @MongoDB\Document(repositoryClass="App\DocumentBundle\Repository\BlogRepository")
 */
class Blog {

    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\String
     * @Assert\NotBlank()
     */
    protected $title;

    /**
     * @MongoDB\string
     * @Assert\NotBlank()
     */
    protected $blog;

    /**
     * @MongoDB\EmbedMany(targetDocument="Tag")
     */
    private $tags;

    /**
     * @MongoDB\Timestamp
     */
    protected $created;

    /**
     * @MongoDB\Timestamp
     */
    protected $updated;
}

// Tag

namespace App\DocumentBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
 * @MongoDB\EmbeddedDocument
 */
class Tag {

    /**
     * @MongoDB\String
     */
    protected $name;
}

为 tag 属性生成了一个 ArrayCollection 类型,但 JMSSerializer 包不喜欢它。如果我将标签更改为 @MongoDB\String 并重新生成博客文档,则会发生序列化,但不会使用 @MongoDB\EmbedMany(targetDocument="Tag") 集。

我是否需要指定一些 JMSSerializer 注释属性允许嵌入文档也被序列化?

4

1 回答 1

1

您必须为 JMSSerializer 配置预期类型

注释:

/**
 * @MongoDB\EmbedMany(targetDocument="Tag")
 * @Type(ArrayCollection<App\DocumentBundle\Document\Tag>)
 */
private $tags;

亚毫升:

tags:
    expose: true
    type: ArrayCollection<App\DocumentBundle\Document\Tag>
于 2014-01-07T11:34:44.723 回答