ich ein wenig Hilfe brauchen, ich das nächste Szenario haben:JMS Serializer Liste Polymorphe mit XML-Deserialisierung
AbtsractItem Datei:
<?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;
}
Teil File:
<?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
}
Complement Datei:
<?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 Datei:
<?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
}
So erwartete ich so etwas wie das nächste XML:
<MyObjects>
<item>
<objectType>Part</objectType>
<number>1237173</number>
</item>
<item>
<objectType>Complement</objectType>
<data>loremp ipsum...</data>
</item>
</MyObjects>
wenn ich serialisiert/deserialisiert in JSON Ich habe nicht Problem, aber nicht wie die für XML. Ich sah die Beispiele für Arrays, für polymorphe Attribute und den Diskriminator, aber in meinem Fall brauche ich eine AbstractItem-Sammlung, auf diese Weise erhalte ich die Nachricht "Kann die abstrakte Klasse Com \ AbtsractItem nicht instanziieren", wenn meine Klasse es ist war nicht abstrakt, ich bekomme nur die attribute objectType in der XML-Ursache ist Serialisierung eines Elements, aber keine der Kinder.