diff --git a/src/JMS/Serializer/GenericSerializationVisitor.php b/src/JMS/Serializer/GenericSerializationVisitor.php index 6ad7af576..1407bfb5a 100644 --- a/src/JMS/Serializer/GenericSerializationVisitor.php +++ b/src/JMS/Serializer/GenericSerializationVisitor.php @@ -51,7 +51,7 @@ public function visitString($data, array $type) $this->root = $data; } - return $data; + return (string) $data; } public function visitBoolean($data, array $type) @@ -60,7 +60,7 @@ public function visitBoolean($data, array $type) $this->root = $data; } - return $data; + return (boolean) $data; } public function visitInteger($data, array $type) @@ -69,7 +69,7 @@ public function visitInteger($data, array $type) $this->root = $data; } - return $data; + return (int) $data; } public function visitDouble($data, array $type) @@ -78,7 +78,7 @@ public function visitDouble($data, array $type) $this->root = $data; } - return $data; + return (float) $data; } /** diff --git a/tests/JMS/Serializer/Tests/Serializer/JsonSerializationTest.php b/tests/JMS/Serializer/Tests/Serializer/JsonSerializationTest.php index 924483095..15ff843c2 100644 --- a/tests/JMS/Serializer/Tests/Serializer/JsonSerializationTest.php +++ b/tests/JMS/Serializer/Tests/Serializer/JsonSerializationTest.php @@ -111,6 +111,58 @@ function(VisitorInterface $visitor, AuthorList $data, array $type) { $this->assertEquals('[{"full_name":"foo","_links":{"details":"http:\/\/foo.bar\/details\/foo","comments":"http:\/\/foo.bar\/details\/foo\/comments"}},{"full_name":"bar","_links":{"details":"http:\/\/foo.bar\/details\/bar","comments":"http:\/\/foo.bar\/details\/bar\/comments"}}]', $this->serialize($list)); } + public function getPrimitiveTypes() + { + return array( + array( + 'type' => 'boolean', + 'data' => true, + ), + array( + 'type' => 'boolean', + 'data' => 1, + ), + array( + 'type' => 'integer', + 'data' => 123, + ), + array( + 'type' => 'integer', + 'data' => "123", + ), + array( + 'type' => 'string', + 'data' => "hello", + ), + array( + 'type' => 'string', + 'data' => 123, + ), + array( + 'type' => 'double', + 'data' => 0.1234, + ), + array( + 'type' => 'double', + 'data' => "0.1234", + ), + ); + } + + /** + * @dataProvider getPrimitiveTypes + */ + public function testPrimitiveTypes($primitiveType, $data) + { + $visitor = $this->serializationVisitors->get('json')->get(); + $functionToCall = 'visit' . ucfirst($primitiveType); + $result = $visitor->$functionToCall($data, array()); + if ($primitiveType == 'double') { + $primitiveType = 'float'; + } + $this->assertInternalType($primitiveType, $result); + } + protected function getFormat() { return 'json';