Browse Source

is_scalar(null) !== true

Lukas Kahwe Smith 14 years ago
parent
commit
46d900682f

+ 1 - 1
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);

+ 5 - 5
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);
     }
-}
+}

+ 2 - 2
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()
         );
     }
-}
+}

+ 6 - 1
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;
         }