使用Symfony 4反序列化多个嵌套实体

时间:2019-02-13 15:37:36

标签: xml symfony nested entity serializer

让我们说我有这个XML

<?xml version="1.0" encoding="UTF-8"?>
<Order>
  <InvoiceNumber>201902130420</InvoiceNumber>
  <Products>
    <Product>
      <Name>DaVinci IQ</Name>
      <SKU>420342300</SKU>
    </Product>
    <Product>
      <Name>Mighty</Name>
      <SKU>420342305</SKU>
    </Product>
  </Products>
</Order>

,并希望将给定的XML反序列化为现有的“ Order” -Entity,其中包含一组Product-Entities,并且在Order属性$ products中具有的所有子节点。

当我打电话

$order = $this->serializer->deserialize($xmlContent, Order::class, 'xml');

我确实从XML中获得了带有参数的Order对象,并且$ products-property被数组项填充。

但是,尽管我希望在生成的Order-Object中拥有一组Product []-Entities,但是我的$ products-property却被包含产品值的平面数组填充。

换句话说:我希望生成的$ order看起来像这样:

App\Model\Order {
  -InvoiceNumber: "201902130420"
  -products: array:2 [
    0 => App\Model\Product {
      -Name: DaVinci IQ
      -SKU: 420342300
    }
    1 => App\Model\Product {
      -Name: Mighty
      -SKU: 420342305
    }
  ]
}

但是我得到了这个:

App\Model\Order {
  -InvoiceNumber: "201902130420"
  -products: array:2 [
    "Product" => array:2 [
      "Name" => "DaVinci IQ"
      "SKU" => "420342300"
    ]
    "Product" => array:2 [
      "Name" => "Mighty"
      "SKU" => "420342305"
    ]
  ]
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的序列化程序是否已加载ArrayDenormalizer?如果是这样,那么按以下方式调用它应该可以工作:

$order = $this->serializer->deserialize($xmlContent,'App\Model\Product[]', 'xml'); 

在类名后注意[]。

编辑:放入类路径App \ Model \ Product,在:-)之前没看到它