diff --git a/src/JMS/Serializer/GenericSerializationVisitor.php b/src/JMS/Serializer/GenericSerializationVisitor.php index 9590f746c..dc766217e 100644 --- a/src/JMS/Serializer/GenericSerializationVisitor.php +++ b/src/JMS/Serializer/GenericSerializationVisitor.php @@ -92,9 +92,7 @@ public function visitArray($data, array $type) $this->root = array(); $rs = &$this->root; } else { - // ArrayObject is specially treated by the json_encode function and - // serialized to { } while a mere array would be serialized to []. - $rs = isset($type['params'][1]) ? new \ArrayObject() : array(); + $rs = array(); } foreach ($data as $k => $v) { diff --git a/src/JMS/Serializer/JsonSerializationVisitor.php b/src/JMS/Serializer/JsonSerializationVisitor.php index 898b1f709..aed5055f4 100644 --- a/src/JMS/Serializer/JsonSerializationVisitor.php +++ b/src/JMS/Serializer/JsonSerializationVisitor.php @@ -36,4 +36,17 @@ public function setOptions($options) { $this->options = (integer) $options; } + + public function visitArray($data, array $type) + { + $result = parent::visitArray($data, $type); + + if (null !== $this->getRoot() && isset($type['params'][1]) && 0 === count($result)) { + // ArrayObject is specially treated by the json_encode function and + // serialized to { } while a mere array would be serialized to []. + return new \ArrayObject(); + } + + return $result; + } }