我试图将一个php数组序列化为xml,但是有些东西在这里等待。问题也可能是与兔子有关的..在将rabbitmq实施到系统之前有类似的错误。
代码:
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);
if($return_type == "xml")
{
// Create xml-response out of the information found, and return it:
return $serializer->serialize($options, 'xml');
}
else if($return_type == "json")
{
// Create json-response out of the information found, and return it:
return $serializer->serialize($options, 'json');
}
错误:
注意:unserialize():偏移量为0的错误为30个字节
500内部服务器错误 - ContextErrorException
json-part工作正常,但序列化为xml会产生错误。我在这里缺少什么?
修改 错误的堆栈跟踪的一部分。
[2015-10-05 12:37:13] request.CRITICAL:未捕获PHP异常 Symfony \ Component \ Debug \ Exception \ ContextErrorException:"注意: unserialize():偏移量为0的30字节错误"在 C:\瓦帕\ WWW \项目\ myproject的\ v.0.1 \厂商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \的RabbitMQ \ RpcClient.php 第63行{"例外":" [对象] (Symfony \ Component \ Debug \ Exception \ ContextErrorException(code:0): 注意:unserialize():在0的30字节偏移处出错 C:\瓦帕\ WWW \项目\ myproject的\ v.0.1 \厂商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \ RabbitMQ的\ RpcClient.php:63)"} []
EDIT2: 这里似乎还有其他事情发生。它在完整的堆栈跟踪中显示了这一点:
供应商\ oldsound \ RabbitMQ的束\ OldSound \ RabbitMqBundle \的RabbitMQ \ RpcClient.php', ' 63',数组(' msg' =>对象(AMQPMessage),' messageBody' =>'错误: 无效的字符错误'))
为什么那样?
EDIT3: 在序列化之前,我在代码中加了一些回声,然后在它之后,它打印第一个而不是第二个。
echo "TESTING, ROW: ".__LINE__;
$xml = $serializer->serialize($options, 'xml');
echo "TESTING, ROW: ".__LINE__;
我也把这些代码放在try-catch中,但它没有给出任何错误..?这里有一些阴暗的事情......
Edit4: 我尝试使用这样简单的序列化器:
$xml = $serializer->serialize(array("test"=>1), 'xml');
这似乎工作得很好。这让我想问:在原始数组中,串行器没有什么字符?不幸的是,我无法展示阵列的内部,但如果有人对使用序列化器时不可接受的字符有一些想法,我很高兴听到。
答案 0 :(得分:1)
似乎序列化器不喜欢我的数组键。我有像这样的空格键:
array("spaced key" => $data);
当我将钥匙改为:
array("spaced_key" => $data);
它开始起作用了。