diff --git a/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php b/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php index 374be3bbb9..5bf771a8bd 100644 --- a/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/JsonEncoder.php @@ -25,7 +25,7 @@ class JsonEncoder extends AbstractEncoder */ public function encode($data, $format) { - if (!is_scalar($data)) { + if ($this->serializer->isStructuredType($data)) { $data = $this->serializer->normalize($data, $format); } return json_encode($data); diff --git a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php index eff70ede6e..d65ba46a46 100644 --- a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php @@ -37,12 +37,12 @@ class XmlEncoder extends AbstractEncoder $this->dom = new \DOMDocument(); $this->format = $format; - if (is_scalar($data)) { - $this->appendNode($this->dom, $data, 'response'); - } else { + if ($this->serializer->isStructuredType($data)) { $root = $this->dom->createElement('response'); $this->dom->appendChild($root); $this->buildXml($root, $data); + } else { + $this->appendNode($this->dom, $data, 'response'); } return $this->dom->saveXML(); } @@ -115,7 +115,7 @@ class XmlEncoder extends AbstractEncoder } if (is_object($data)) { $data = $this->serializer->normalizeObject($data, $this->format); - if (is_scalar($data)) { + if (!$this->serializer->isStructuredType($data)) { // top level data object is normalized into a scalar if (!$parentNode->parentNode->parentNode) { $root = $parentNode->parentNode; @@ -250,4 +250,4 @@ class XmlEncoder extends AbstractEncoder { return $name && strpos($name, ' ') === false && preg_match('|^\w+$|', $name); } -} \ No newline at end of file +} diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index 54cf43fe55..4389b9decd 100644 --- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -52,7 +52,7 @@ class GetSetMethodNormalizer extends AbstractNormalizer if (null === $propertyMap || isset($propertyMap[$attributeName])) { $attributeValue = $method->invoke($object); - if (!is_scalar($attributeValue)) { + if ($this->serializer->isStructuredType($attributeValue)) { $attributeValue = $this->serializer->normalize($attributeValue, $format); } @@ -142,4 +142,4 @@ class GetSetMethodNormalizer extends AbstractNormalizer 0 === $method->getNumberOfRequiredParameters() ); } -} \ No newline at end of file +} diff --git a/src/Symfony/Component/Serializer/Serializer.php b/src/Symfony/Component/Serializer/Serializer.php index d79119f060..eb3991d74a 100644 --- a/src/Symfony/Component/Serializer/Serializer.php +++ b/src/Symfony/Component/Serializer/Serializer.php @@ -32,6 +32,11 @@ class Serializer implements SerializerInterface protected $encoders = array(); protected $normalizerCache = array(); + public function isStructuredType($val) + { + return null !== $val && !is_scalar($val); + } + /** * {@inheritdoc} */ @@ -90,7 +95,7 @@ class Serializer implements SerializerInterface { if (is_array($data)) { foreach ($data as $key => $val) { - $data[$key] = is_scalar($val) ? $val : $this->normalize($val, $format); + $data[$key] = $this->isStructuredType($val) ? $this->normalize($val, $format) : $val; } return $data; }