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中沒有@。
這可能實際工作,羞我沒想到吧!這個解決方案並不是那麼幹淨,但是做得很好。我一直在研究JMS串行器,但哇,文檔只是接近不存在 –
很高興幫助。祝你好運! –