2015-08-04 1 views
4

Comment appliquer des vérifications de type booléen lors de la désérialisation de json à l'aide de jmsserializerbunlde? à savoir comment puis-je désavouer une entrée comme:Comment appliquer des vérifications de types bool sur json avec jmsserialize

{ "boolField": "false"}

d'être désérialisé et coulé de type à Boolean true? J'utilise jmsserializerbundle et la bibliothèque de validation de symfony2.

Mon champ modèle annotations:

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

Je désérialisation puis la validation en cours d'exécution.

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


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

Cela renvoie aucune erreur, mais a l'effet secondaire de mon modèle ayant la boolField $ à true.

Si je supprime l'annotation @Type, elle ne se désérialisera pas.

Je pourrais changer le type de jmserialize en chaîne puis avoir une méthode @PostDeserialize pour convertir ces chaînes en booléens mais y at-il une manière plus propre?

Répondre

0

Dans votre exemple:

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

'boolField' est une chaîne, pas une valeur booléenne.

Peut-être

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

interprétera mieux.

(non testé)

+0

Malheureusement, je ne contrôle pas le système de génération JSON je suis incapable de faire le changement. J'ai fini par utiliser une méthode PostDeserialize pour corriger les valeurs de chaînes booléennes. – JohnM