Q:

Symfony 3 app customizing JSON output

In my Symfony 3 web app I'm serializing some DB rows into Json as follows:
    $doc = $this->get ( 'doctrine' );
    $repo = $doc->getRepository ( 'AppBundle:Customer' );
    $result = $repo->createQueryBuilder ( 'c' )->setMaxResults(25)->getQuery ()->getResult ();

    $encoder = new JsonEncoder ();
    $normalizer = new GetSetMethodNormalizer ();

    $serializer = new Serializer ( array (
             new \AppBundle\DateTimeNormalizer(), $normalizer
    ), array (
            $encoder 
    ) );

    $json = $serializer->serialize ( $result, 'json' );

This outputs the desired data, e.g:
 {companyname:"Microsoft"}

In order to (at least initially) maintain compatibility with a legacy system, I'd like all the Json names to be in uppercase, e.g.
 {COMPANYNAME:"Microsoft"}

Is the best way to tackle this by approaching from:

The Encoder
The Normalizer(s)
The Serializer
Some other way? 

Please briefly describe the suggested approach

A:

You can implement your custom NameConverter a class that implements the NameConverterInterface and pass as second argument to the GetSetMethodNormalizer.  As Example:
<? php
namespace AppBundle;

use Symfony\Component\Serializer\NameConverter\NameConverterInterface;

class ToUppercaseNameConverter implements NameConverterInterface
{

    /**
     * Converts a property name to its normalized value. 
     *
     * @param string $propertyName
     *
     * @return string
     */
    public function normalize($propertyName)
    {
        return strtoupper($propertyName);
    }

    /**
     * Converts a property name to its denormalized value. 
     *
     * @param string $propertyName
     *
     * @return string
     */
    public function denormalize($propertyName)
    {

    }
}
? >

and use it as follow:
$uppercaseConverter = new ToUppercaseNameConverter();
$normalizer = new GetSetMethodNormalizer (null, $uppercaseConverter);

You can take a look at the doc Converting Property Names when Serializing and Deserializing
Hope this help

