JMS序列化程序Symfony2是否可以将多个嵌套实体的JSON序列化为一个对象?

JMS序列化程序Symfony2是否可以将多个嵌套实体的JSON序列化为一个对象?,symfony,jmsserializerbundle,Symfony,Jmsserializerbundle,我有4个相关实体 包->有一个接收器 Package->has PackageLines->PackageLine引用了库存商品 是否可以序列化此JSON数据 是否要添加到包含所有其他实体的包实体?以干净高效的方式 我曾尝试使用JMS序列化程序包,但运气不太好 库存项目是被引用库存项目的id 包装 /** * Package * * @ORM\Table() * @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\Pack

我有4个相关实体

包->有一个接收器 Package->has PackageLines->PackageLine引用了库存商品

是否可以序列化此JSON数据

是否要添加到包含所有其他实体的包实体?以干净高效的方式

我曾尝试使用JMS序列化程序包,但运气不太好

库存项目是被引用库存项目的id

包装

/**
 * Package
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\PackageRepository")
 * @ORM\HasLifecycleCallbacks
 *
 * @ExclusionPolicy("all")
 *
 */
class Package
{

    CONST STATUS_COMPLETED = "COMPLETED";
    CONST STATUS_PROCESSING = "PROCESSING";
    CONST STATUS_CANCELLED = "CANCELLED";
    CONST STATUS_ON_HOLD = "ON_HOLD";
    CONST STATUS_FAILED = "FAILED";
    CONST STATUS_ERROR = "ERROR";


    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Expose
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="IREnterprise\UserBundle\Entity\User", inversedBy="packages")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     **/
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\Receiver", inversedBy="package", cascade={"all"})
     * @Assert\Valid()
     * @Expose
     **/
    private $receiver;

    /**
     * @ORM\OneToMany(targetEntity="IREnterprise\AppBundle\Entity\PackageLine", mappedBy="package", cascade={"all"})
     * @Assert\Valid()
     * @Expose
     **/
    private $packageLines;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="createdAt", type="datetime")
     * @Expose
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updatedAt", type="datetime")
     * @Expose
     */
    private $updatedAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="shippedAt", type="datetime", nullable=true)
     * @Expose
     */
    private $shippedAt;

    /**
     * @var string
     *
     * @ORM\Column(name="status", type="string", length=255, nullable=true)
     * @Expose
     */
    private $status;

    /**
     * @var string
     * @ORM\Column(name="deliveryNote", type="string", length=255, nullable=true)
     * @Expose
     */
    private $deliveryNote;


    public function __construct() {
        $this->setCreatedAt(new \DateTime('now'));
        $this->setPackageLines(new ArrayCollection());

        $this->setStatus(self::STATUS_PROCESSING);
    }

    ... getters & setters
}
接受者

/**
 * Receiver
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\ReceiverRepository")
 *
 * @ExclusionPolicy("all")
 *
 */
class Receiver
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="IREnterprise\AppBundle\Entity\Package", mappedBy="receiver", cascade={"all"})
     **/
    private $packages;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     * @Assert\NotBlank()
     * @Expose
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="company", type="string", length=255, nullable=true)
     * @Expose
     */
    private $company;

    /**
     * @var string
     *
     * @ORM\Column(name="address1", type="string", length=255)
     * @Assert\NotBlank()
     * @Expose
     */
    private $address1;

    /**
     * @var string
     *
     * @ORM\Column(name="address2", type="string", length=255, nullable=true)
     * @Expose
     */
    private $address2;

    /**
     * @var string
     *
     * @ORM\Column(name="country", type="string", length=255)
     * @Assert\Country()
     * @Expose
     */
    private $country;

    /**
     * @var string
     *
     * @ORM\Column(name="zip_code", type="string", length=255)
     * @Assert\NotBlank()
     * @Expose
     */
    private $zipCode;

    /**
     * @var string
     *
     * @ORM\Column(name="city", type="string", length=255)
     * @Assert\NotBlank()
     * @Expose
     */
    private $city;

    /**
     * @var string
     *
     * @ORM\Column(name="phone", type="string", length=255, nullable=true)
     * @Expose
     */
    private $phone;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255, nullable=true)
     * @Assert\Email()
     * @Expose
     */
    private $email;

    public function __construct() {
        $this->setPackages(new ArrayCollection());
    }
}
包装线

/**
 * PackageLine
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\PackageLineRepository")
 * @ORM\HasLifecycleCallbacks
 *
 * @ExclusionPolicy("all")
 *
 */
class PackageLine {

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\Package", inversedBy="package", cascade={"all"})
     * @ORM\JoinColumn(name="package_id", referencedColumnName="id")
     **/
    private $package;

    /**
     * @ORM\ManyToOne(targetEntity="IREnterprise\AppBundle\Entity\StockItem", inversedBy="stockitem", cascade={"all"})
     * @ORM\JoinColumn(name="stockitem_id", referencedColumnName="id")
     * @Expose
     **/
    private $stockItem;

    /**
     * @var integer
     *
     * @ORM\Column(name="quantity", type="bigint")
     * @Expose
     */
    private $quantity;
}
库存品

/**
 * StockItem
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="IREnterprise\AppBundle\Entity\StockItemRepository")
 * @ORM\HasLifecycleCallbacks
 *
 * @ExclusionPolicy("all")
 *
 */
class StockItem
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Expose
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="IREnterprise\UserBundle\Entity\User", inversedBy="stockItems")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     **/
    private $user;

    /**
     * @var string
     *
     * @ORM\Column(name="barcode", type="string", length=255, nullable=true)
     */
    private $barcode;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     * @Expose
     * @Assert\NotBlank()
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="SKU", type="string", length=255)
     * @Expose
     * @Assert\NotBlank()
     * @Assert\Type(type="digit", message="The value {{ value }} is not a valid {{ type }}.")
     */
    private $SKU;

    /**
     * @var integer
     *
     * @ORM\Column(name="stockCount", type="bigint")
     * @Expose
     */
    private $stockCount = 0;

    /**
     * @var integer
     *
     * @ORM\Column(name="orderCount", type="bigint")
     * @Expose
     */
    private $orderCount = 0;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="createdAt", type="datetime")
     * @Expose
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updatedAt", type="datetime")
     * @Expose
     */
    private $updatedAt;

    public function __construct() {
        $this->setCreatedAt(new \DateTime('now'));
    }
}

这是很有可能的。参见示例

   class Package
    { 
        /**
         * @Type("string")
         */

       private $id;

        /**
         * @Type("ArrayCollection<MyNamespace\Recevier>")
         */
       private $receiver;
   }

   class Receiver
    {
      /**
       * @Type("string")
       */

        private $id;
     }
请看医生 我想这会对你很有帮助

{  
   "package":{  
      "id":"1",
      "receiver":{  
         "id":"1"
      }
   }
}