1
我需要一點點幫助,我在下一個場景:JMS串行名單多態性與XML反序列化
AbtsractItem文件:
<?php
namespace Com;
use JMS\Serializer\Annotation as JMS;
/**
* @JMS\Discriminator(
* field = "objectType",
* map = {
* "part": "Com\Part",
* "complement" : "Com\Complement"
* },
* disabled=true
*)
*/
abstract class AbstractItem
{
protected $objectType;
}
部分文件:
<?php
namespace Com;
use JMS\Serializer\Annotation as JMS;
class Part extends AbstractItem
{
/**
* @JMS\Type("string")
* @JMS\XmlElement(cdata=false)
*/
protected $objectType = "Part";
/**
* @JMS\Type("string")
* @JMS\XmlElement(cdata=false)
*/
private $data;
//getters & setters
}
補充文件:
<?php
namespace Com;
use JMS\Serializer\Annotation as JMS;
class Complement extends AbstractItem
{
/**
* @JMS\Type("string")
* @JMS\XmlElement(cdata=false)
*/
protected $objectType = "Complemet";
/**
* @JMS\Type("string")
* @JMS\XmlElement(cdata=false)
*/
private $number;
//getters & setters
}
爲MyObject文件:
<?php
namespace Com;
use JMS\Serializer\Annotation as JMS;
/**
* @JMS\XmlRoot("MyObjects")
*/
class MyObject
{
/**
* @JMS\Type("array<Com\AbstractItem>")
* @JMS\XmlElement(cdata=false)
* @JMS\XmlList(inline=false, entry="item")
*/
private $items;
//getters & setters
}
所以我預計像下一XML:
<MyObjects>
<item>
<objectType>Part</objectType>
<number>1237173</number>
</item>
<item>
<objectType>Complement</objectType>
<data>loremp ipsum...</data>
</item>
</MyObjects>
當我連載/ JSON中反序列化我有沒有問題,但不是這樣的XML。我看到了數組的示例,多態屬性和鑑別器,但在我的情況下,我需要有一個AbstractItem集合,這樣我得到一條消息「無法實例化抽象類Com \ AbtsractItem」,如果我的類不是抽象的我只是在xml中得到屬性objectType原因是序列化一個Item,但沒有孩子。