3 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
下面是一個(gè)最小的工作例如反序列化XML到單個(gè)POS實(shí)例與ArrayCollection的POS_Source實(shí)例。我扔掉了對(duì)反序列化此特定XML而言不是必不可少的所有規(guī)范化器等。
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
class POS
{
// ... just as in the question ...
}
/**
* Minimal implementation of POS_Source for purposes of this deserialization example.
*/
class POS_Source
{
private $RequestorID;
public function setPOS(POS $POS)
{
}
public function getRequestorID()
{
return $this->RequestorID;
}
public function setRequestorID($RequestorID)
{
$this->RequestorID = $RequestorID;
}
}
$data = '<POS>
<!-- ... the same XML as in the question ... -->
</POS>';
$normalizers = [
new ArrayDenormalizer(),
new ObjectNormalizer(null, null, null, new ReflectionExtractor())
];
$encoders = [new XmlEncoder()];
$serializer = new Serializer($normalizers, $encoders);
$pos = $serializer->deserialize($data,POS::class,'xml');
dump($pos);
印刷:
POS {#14
-Source: Doctrine\Common\Collections\ArrayCollection {#11
-elements: array:4 [
0 => POS_Source {#17
-RequestorID: array:3 [
"@Type" => 11
"@ID" => "T921"
"CompanyName" => array:3 [
"@Code" => "CP"
"@CodeContext" => "123T"
"#" => ""
]
]
}
1 => POS_Source {#27
-RequestorID: array:3 [
"@Type" => 1
"@ID" => 34778
"#" => ""
]
}
2 => POS_Source {#22
-RequestorID: array:3 [
"@Type" => 9
"@ID" => "ZF"
"#" => ""
]
}
3 => POS_Source {#25
-RequestorID: array:3 [
"@Type" => 17
"@ID" => "mabaan"
"#" => ""
]
}
]
}
}

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是部分答案,而不是解決方案。
因此,看起來反序列化不支持嵌入式php對(duì)象,并且您已經(jīng)創(chuàng)建了一個(gè)自定義反序列化方法。
我仍在使用解決方案,但簡(jiǎn)短的答案是您必須遍歷標(biāo)準(zhǔn)化數(shù)組,然后嘗試匹配屬性名稱。我正在嘗試尋找一種方法來查詢對(duì)象,以僅查詢序列化組文檔塊批注中包含的那些屬性。

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
在反序列化包含其他對(duì)象的對(duì)象時(shí),必須提供ObjectNormalizer一個(gè)類型提取器來確定嵌套對(duì)象的類型。
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
// ...
$normalizers = [
new DateTimeNormalizer(),
new ArrayDenormalizer(),
new PropertyNormalizer(),
new ObjectNormalizer($classMetadataFactory, $metadataAwareNameConverter, null, new ReflectionExtractor()), // added type extractor as fourth argument
];
- 3 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)