2015-11-05 84 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

很高兴帮助。祝你好运! –