2015-11-05 80 views
0

根據請求的內容類型,我有一個需要序列化爲JSON或XML的數組。具有屬性的JSON序列化和XML

$responseArray = [ 
          "name" => "" 
         , "status" => -1 
         , "message" => "An unknown error has occurred." 
        ]; 

用JSON編碼它工作得很好

$plainTextResponse = $serializer->serialize($responseArray, 'json'); 

{"name":"","status":-1,"message":"An unknown error has occurred."} 

哪些是對的,正是我需要的。問題是將其表示爲XML

$plainTextResponse = $serializer->serialize($responseArray, 'xml'); 

<?xml version="1.0"?> 
<response> 
    <name></name> 
    <status>-1</status> 
    <message>An unknown error has occurred.</message> 
</response> 

但是在命令中嵌套這些屬性的intead我需要它們顯示爲屬性。這是可行的這種方式(注意屬性名前的@)

$responseArray = [ 
          "@name" => "" 
         , "@status" => -1 
         , "@message" => "An unknown error has occurred." 
        ]; 

... 

    $plainTextResponse = $serializer->serialize($responseArray, 'xml'); 


<?xml version="1.0"?> 
<response name="" status="-1" message="An unknown error has occurred."/> 

而且很明顯,如果我試圖將其轉換成JSON然後它會留在屬性

$plainTextResponse = $serializer->serialize($responseArray, 'json'); 

{"@name":"","@status":-1,"@message":"An unknown error has occurred."} 

是名稱的@有一種序列化數組的方法,以便它在XML中添加屬性並且在json中沒有@。

回答

0

我想你應該對XML序列化創建另一個數組:

foreach($responseArray as $key => $value) { 
    $respondeArrayXml["@".$key] = $value; 
} 
$plainTextResponseXML = $serializer->serialize($responseArrayXML, 'xml'); 
$plainTextResponseJSON = $serializer->serialize($responseArray, 'json'); 
+0

這可能實際工作,羞我沒想到吧!這個解決方案並不是那麼幹淨,但是做得很好。我一直在研究JMS串行器,但哇,文檔只是接近不存在 –

+0

很高興幫助。祝你好運! –