JMSSerializer预期输入结束,但得到T_NONE类型的“/”

时间:2013-09-01 21:51:14

标签: php serialization deserialization jmsserializerbundle

我正在使用JMS来序列化和反序列化我的实体我有一个批处理来生成一个json文件和其他读取该文件

我的实体有一个字段DateTime,如下所示

/**
 * @var \DateTime
 *
 * @ORM\Column(name="inscription_date", type="datetime", nullable=false)
 * @JMS\Type("DateTime<'d/m/Y'>")
 */
private $inscriptionDate;

当序列化实体时,结果为

"inscription_date":"30\/05\/2007"

但问题是当我要反序列化时我得到了

[JMS\Parser\SyntaxErrorException]                                            
Expected end of input, but got "/" of type T_NONE at position 11 (0-based).

注意:当我使用json_decode内置函数返回stdClass时没有问题


更新1

似乎不是这个字段,我删除了原始序列化的字段,但仍然得到相同的错误。每个对象都在一行中序列化,每个对象用PHP_EOL

分隔

这是数据people.json

的示例
{"name":"dexter","date":"13/04/2009", "doc": "1047516320" }
{"name":"deedee","date":"30/05/2013", "doc": "1047516325" }

所有字段均有效且数据类型为数字或字符串

2 个答案:

答案 0 :(得分:4)

反序列化失败时会发生此错误。确保使用正确类型的数据传递正确的json。同时检查同样被反序列化的子对象是否也正确 - 传递的json也必须正确。

同时确保正确编写课程而不使用正斜杠:

@Type("Acme\DemoBundle\Entity\City")

还要确保这实际上是类,但不是接口(您可能需要编写接口解析器来实现它)

答案 1 :(得分:0)

解析器在people.json中阻塞了无效的JSON。需要逃避正斜杠或固相线。请参阅http://json.org/中的JSON文档,并阅读有关字符串的部分。

您的源JSON应如下所示:

{"name":"dexter","date":"13\/04\/2009", "doc": "1047516320" }

如果您无法控制源JSON,那么您必须编写自己的Handler实现SubscribingHandlerInterface并将其注册到序列化程序。