diff --git a/src/Transformer/AbstractTransformer.php b/src/Transformer/AbstractTransformer.php index e4f847f..7348df7 100644 --- a/src/Transformer/AbstractTransformer.php +++ b/src/Transformer/AbstractTransformer.php @@ -56,17 +56,28 @@ protected function recursiveSetValues(array &$array) /** * @param array $array + * @param null $parentKey + * @param null $currentKey */ - protected function recursiveFlattenOneElementObjectsToScalarType(array &$array) + protected function recursiveFlattenOneElementObjectsToScalarType(array &$array, $parentKey = null, $currentKey = null) { if (1 === \count($array) && \is_scalar(\end($array))) { - $array = \array_pop($array); + if ($parentKey == $currentKey) { + $array = \array_pop($array); + } } if (\is_array($array)) { - foreach ($array as &$value) { + foreach ($array as $parentKey => &$value) { + if (\is_array($value)) { - $this->recursiveFlattenOneElementObjectsToScalarType($value); + $key = null; + foreach($value as $key => $v) { + if (is_array($v)) { + $this->recursiveFlattenOneElementObjectsToScalarType($v, $parentKey, $key); + } + } + $this->recursiveFlattenOneElementObjectsToScalarType($value, $parentKey, $key); } } } diff --git a/tests/Transformer/JsonTransformerTest.php b/tests/Transformer/JsonTransformerTest.php index ae4a97a..d6b41e5 100644 --- a/tests/Transformer/JsonTransformerTest.php +++ b/tests/Transformer/JsonTransformerTest.php @@ -23,6 +23,46 @@ class JsonTransformerTest extends \PHPUnit_Framework_TestCase { + + public function testSerializationObjectWithArrayOfOneAttribute() + { + $object = new \stdClass(); + $object->payload = ['userId' => 1]; + + $serializer = new DeepCopySerializer(new JsonTransformer()); + + $expected = <<assertEquals($expected, $serializer->serialize($object)); + } + + public function testSerializationObjectWithObjectOfOneAttribute() + { + $internal = new \stdClass(); + $internal->userId = 1; + + $object = new \stdClass(); + $object->payload = $internal; + + $serializer = new DeepCopySerializer(new JsonTransformer()); + + $expected = <<assertEquals($expected, $serializer->serialize($object)); + } + public function testSerialization() { $object = $this->getObject();