第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在XML Symfony中將XML反序列化為包含數(shù)組集合的對(duì)象

如何在XML Symfony中將XML反序列化為包含數(shù)組集合的對(duì)象

PHP
湖上湖 2021-04-25 10:17:58
我有XML格式<POS>    <Source PseudoCCode="BOA" ISOCountry="US" AgentDutyCode="J114N">        <RequestorID Type="11" ID="T921">            <CompanyName Code="CP" CodeContext="123T"/>        </RequestorID>    </Source>    <Source>        <RequestorID Type="1" ID="34778"/>      </Source>    <Source>        <RequestorID Type="9" ID="ZF"/>    </Source>    <Source>        <RequestorID Type="17" ID="mabaan"/>    </Source></POS>`我有一個(gè)要反序列化的php對(duì)象。  class POS  { /**   * @ORM\OneToMany(targetEntity="POS_Source", mappedBy="POS", orphanRemoval=true) * @Groups("Include") */private $Source;public function __construct(){     $this->Source = new ArrayCollection();}/** * @return ArrayCollection|OTA_POS_Source[] */public function getSource(): ArrayCollection{    return $this->Source;}public function addSource(POS_Source $source): self{    if (!$this->Source->contains($source)) {        $this->Source[] = $source;        $source->setPOS($this);    }    return $this;}public function removeSource(POS_Source $source): self{    if ($this->Source->contains($source)) {        $this->Source->removeElement($source);        // set the owning side to null (unless already changed)        if ($source->getPOS() === $this) {            $source->setPOS(null);        }    }    return $this;}它給了我POS對(duì)象,而不是給它一個(gè)下面的數(shù)組,而不是POS_Source對(duì)象的集合。 POS {#839 ▼   -id: null   -Source: array:5 [▼     0 => array:4 [?]     1 => array:1 [?]     2 => array:1 [?]     3 => array:1 [?]     4 => array:1 [?]   ] }我如何才能使這項(xiàng)工作一直填充到對(duì)象樹的底部。當(dāng)我從對(duì)象結(jié)構(gòu)序列化為XML時(shí),它的效果很好。
查看完整描述

3 回答

?
largeQ

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"

          "#" => ""

        ]

      }

    ]

  }

}


查看完整回答
反對(duì) 回復(fù) 2021-05-07
?
POPMUISE

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ì)象,以僅查詢序列化組文檔塊批注中包含的那些屬性。


查看完整回答
反對(duì) 回復(fù) 2021-05-07
?
寶慕林4294392

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

];


查看完整回答
反對(duì) 回復(fù) 2021-05-07
  • 3 回答
  • 0 關(guān)注
  • 194 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)