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?
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