Deserialisieren Sie XML mit Array von ObjektenPhp

PHP-Programmierer chatten hier
Anonymous
 Deserialisieren Sie XML mit Array von Objekten

Post by Anonymous »

Ich versuche, ein XML-Datei zu einem Objekt mit einem Array anderer Objekte mit Symfony Serializer zu Deserialisierung zu Deserialisierung, kann aber nicht dazu bringen, mit einem Array von Objekten unter einem bestimmten Schlüssel zu arbeiten. < /p>
Hier ist eine vereinfachte Version des XML:

Code: Select all



test



1


2



< /code>
Ich habe eine Klasse, auf die ich dies wünschen. Es sieht so aus: < /p>
class MyObject
{
private Return $return;
/** @var array */
private array $component = [];
// getters and setters here
}
< /code>
Die Klasse "return" enthält einen "Typ" -Property, die Klasse "Komponente" hat eine "ID", beide mit Gettern und Settern.$serializer    = new Serializer(
[
new ArrayDenormalizer(),
new ObjectNormalizer(propertyTypeExtractor: new ReflectionExtractor()),
],
[new XmlEncoder()]
);
< /code>
Deserialisierung meines XML erzeugt nun das folgende Ergebnis: < /p>
^ App\ValueObject\MyObject^ {
-return: App\ValueObject\Return^ {
-type: "test"
}
-component: array:1 [
"item" => array:2 [
0 => array:1 [
"ID" => "1"
],
1 => array:1 [
"ID" => "2"
(...)
< /code>
Während die erwartete Ausgabe Folgendes ist: < /p>
^ App\ValueObject\MyObject^ {
-return: App\ValueObject\Return^ {
-type: "test"
}
-component: array:2 [
0 => App\ValueObject\Component^ {
-id: "1"
},
1 => App\ValueObject\Component^ {
-id: "2"
}
(...)
< /code>
Deserialisierende Deserialisierung des Rückkehr-Objekts funktioniert wie erwartet und die XML-Zuordnung auf mein Array von Komponenten-Objekten nicht.-component: array:1 [ "item" => array:1 [ 0 => array:1 [ "ID" => "1" ] ]
"aber"

Code: Select all

-component: array:1 [ "item" => array:1 [ "ID" => "1" ] ]
", also fehlt eine Ebene.)
Basierend auf mehreren Tutorials und Antworten hier habe ich versucht, dies als meine Extraktoren zu verwenden:

Code: Select all

$phpDocExtractor = new PhpDocExtractor();
$typeExtractor   = new PropertyInfoExtractor(
typeExtractors: [new ConstructorExtractor([$phpDocExtractor]), $phpDocExtractor, new ReflectionExtractor()]
);
< /code>
, was dazu erzeugt wird: < /p>
 -component: array:1 [
0 => App\ValueObject\Component^ {
-id: ""
< /code>
Es gibt also nur ein Komponentenobjekt (anstelle eines Arrays von 2), auch leer (ID fehlt). Das gleiche passiert, wenn ich nur den phpdocexpractor 
verwende oder einen getSetSetMethodnormalizier mit einem phpdocextractor oder ReflectionExtractracor .

Code: Select all

array
", aber das ändert nichts. Meine Komponentenklasse. und ?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post