如何使用jmsserialize

时间:2015-08-04 14:19:49

标签: json symfony jmsserializerbundle

如何在使用jmsserializerbunlde反序列化json时强制执行布尔类型检查?即我如何禁止输入:

{“boolField”:“false”}

从反序列化和类型转换为布尔值true?

我正在使用jmsserializerbundle和symfony2验证库。

我的模型字段注释:

/**
 * @var bool
 * @Assert\NotNull()
 * @Assert\Type(type="bool")
 * @Type(name="boolean")
 * @SerializedName("boolField")
 */
private $boolField;

我正在反序列化然后运行验证。

 $str = '{"boolField": "false"}';
 $object = $serializer->deserialize($str, TestModel::class, 'json');
 $validator->validate($object);
 print_r($object)


 TestModel Object 
 (
     [boolField:TestModel:private] => 1
 )

这不返回任何错误,但是我的模型的副作用是将$ boolField设置为true。

如果删除注释@Type,则不会反序列化。

我可以将jmserialize类型更改为string然后使用@PostDeserialize方法将这些字符串转换为布尔值但是有更简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

在你的例子中:

$str = '{"boolField": "false"}';

'boolField'是一个字符串,而不是布尔值。

也许

$str = '{"boolField": false}';

表现会更好。

(未测试的)