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" ] ]
Code: Select all
-component: array:1 [ "item" => array:1 [ "ID" => "1" ] ]
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
Code: Select all
array