diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 0fde26975013f..c31ba36a7a76f 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -208,10 +208,22 @@ private function extractAttributes($object) if (0 === strpos($name, 'get') || 0 === strpos($name, 'has')) { // getters and hassers - $attributes[lcfirst(substr($name, 3))] = true; + $propertyName = substr($name, 3); + + if (!$reflClass->hasProperty($propertyName)) { + $propertyName = lcfirst($propertyName); + } + + $attributes[$propertyName] = true; } elseif (strpos($name, 'is') === 0) { // issers - $attributes[lcfirst(substr($name, 2))] = true; + $propertyName = substr($name, 2); + + if (!$reflClass->hasProperty($propertyName)) { + $propertyName = lcfirst($propertyName); + } + + $attributes[$propertyName] = true; } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index c0483180dc99d..1f735cc243b94 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -488,6 +488,11 @@ public function testNormalizeStatic() $this->assertEquals(array('foo' => 'K'), $this->normalizer->normalize(new ObjectWithStaticPropertiesAndMethods())); } + public function testNormalizeUpperCaseAttributes() + { + $this->assertEquals(array('Foo' => 'Foo', 'Bar' => 'BarBar'), $this->normalizer->normalize(new ObjectWithUpperCaseAttributeNames())); + } + public function testNormalizeNotSerializableContext() { $objectDummy = new ObjectDummy(); @@ -662,3 +667,14 @@ public static function getBaz() return 'L'; } } + +class ObjectWithUpperCaseAttributeNames +{ + private $Foo = 'Foo'; + public $Bar = 'BarBar'; + + public function getFoo() + { + return $this->Foo; + } +}