2017-04-25 44 views
0

的陣列XML標籤名稱我有一些麻煩讓我期待使用JMS串行和symfony的3JMS串行器。爲對象

我有一個名爲實體「參考」的XML輸出。 使用註釋@XmlRoot(「參考」)和唯一的對象返回,FOS的XML輸出爲預期其餘束:

<reference> 
    <id>1</id> 
    <title>Title 1</title> 
</reference> 

但是,如果我輸出相同的對象的數組(由教義findAll()返回方法)我得到這樣的:

<result> 
    <entry> 
    <id>1</id> 
    <title>Title 1</title> 
    </entry> 
    <entry> 
    <id>2</id> 
    <title>Title 2</title> 
    </entry> 
    <entry> 
    <id>3/id> 
    <title>Title 3</title> 
    </entry> 
</result> 

標籤被稱爲<entry>,但我想實現這一點:

<result> 
     <reference> 
     <id>1</id> 
     <title>Title 1</title> 
     </reference> 
     <reference> 
     <id>2</id> 
     <title>Title 2</title> 
     </reference> 
     <reference> 
     <id>3/id> 
     <title>Title 3</title> 
     </reference> 
</result> 

(我不在這種情況下不知道如何使用@XmlList,因爲我沒有持有參考項目的母公司...)

謝謝!

回答

0

首先您預期的XML格式不符合我的要求。 id應該是一個屬性。下面的例子就是這樣。查看底部的結果。如果你想要更多的例子,請查看下面的鏈接,它會教你很多。

結果

namespace Application/YourBundle/Model; 

use Application/YourBundle/Model/Reference; 
use JMS\Serializer\Annotation as Serializer; 

/** 
* @Serializer\XmlRoot("result") 
*/ 
class Result 
{ 
    /** 
    * @var Reference[] 
    * 
    * @Assert\Valid(traverse="true") 
    * 
    * @Serializer\XmlList(inline=false, entry="reference") 
    * @Serializer\Type("array<Application\YourBundle\Model\Reference>") 
    */ 
    public $references = []; 
} 

參考

namespace Application/YourBundle/Model; 

use JMS\Serializer\Annotation as Serializer; 

class Reference 
{ 
    /** 
    * @var int 
    * 
    * @Serializer\Type("integer") 
    * @Serializer\XmlAttribute 
    */ 
    public $id; 

    /** 
    * @var string 
    * 
    * @Serializer\Type("string") 
    * @Serializer\XmlValue 
    */ 
    public $title; 
} 

此設置應該給你:

<result> 
    <references> 
     <reference id="1">Title 1</reference> 
     <reference id="2">Title 2</reference> 
     <reference id="3">Title 3</reference> 
    </references> 
</result> 

如果你的反應是一個JSON對象,那麼這將是這樣的:

{ 
    "references": [ 
     { 
      "id": 1, 
      "title": "Title 1" 
     }, 
     { 
      "id": 2, 
      "value": "Title 2" 
     }, 
     { 
      "id": 3, 
      "value": "Title 3" 
     } 
    ] 
} 
+0

大,謝謝! – user1915746