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串行器,但哇,文档只是接近不存在 –
很高兴帮助。祝你好运! –