Created
June 22, 2012 12:17
-
-
Save rosstuck/2972413 to your computer and use it in GitHub Desktop.
Revisions
-
Ross Tuck created this gist
Jun 22, 2012 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ use Metadata\MetadataFactory; use JMS\SerializerBundle\Serializer\Handler\DeserializationHandlerInterface; use JMS\SerializerBundle\Serializer\Handler\SerializationHandlerInterface; use JMS\SerializerBundle\Serializer\VisitorInterface; use JMS\SerializerBundle\Serializer\XmlDeserializationVisitor; use JMS\SerializerBundle\Serializer\Construction\UnserializeObjectConstructor; use JMS\SerializerBundle\Serializer\JsonDeserializationVisitor; use JMS\SerializerBundle\Serializer\Handler\ObjectBasedCustomHandler; use JMS\SerializerBundle\Serializer\Handler\DateTimeHandler; use JMS\SerializerBundle\Serializer\Handler\DoctrineProxyHandler; use JMS\SerializerBundle\Serializer\XmlSerializationVisitor; use JMS\SerializerBundle\Metadata\Driver\AnnotationDriver; use JMS\SerializerBundle\Serializer\Naming\CamelCaseNamingStrategy; use JMS\SerializerBundle\Serializer\Naming\SerializedNameAnnotationStrategy; use JMS\SerializerBundle\Serializer\JsonSerializationVisitor; use JMS\SerializerBundle\Serializer\Serializer; use Doctrine\Common\Annotations\AnnotationRegistry; protected function createSerializer($driver) { $namingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); $objectConstructor = new UnserializeObjectConstructor(); $customSerializationHandlers = array( new DateTimeHandler(), new DoctrineProxyHandler(), ); $customDeserializationHandlers = array( new DateTimeHandler(), new ArrayCollectionHandler(), ); $serializationVisitors = array( 'json' => new JsonSerializationVisitor($namingStrategy, $customSerializationHandlers), 'xml' => new XmlSerializationVisitor($namingStrategy, $customSerializationHandlers), ); $deserializationVisitors = array( 'json' => new JsonDeserializationVisitor($namingStrategy, $customDeserializationHandlers, $objectConstructor), 'xml' => new XmlDeserializationVisitor($namingStrategy, $customDeserializationHandlers, $objectConstructor), ); $factory = new MetadataFactory($driver); return new Serializer($factory, $serializationVisitors, $deserializationVisitors); } protected function getBaseDriver() { if ($this->_baseDriver) { return $this->_baseDriver; } // Register the ORM Annotations in the AnnotationRegistry $reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader(); AnnotationRegistry::registerFile(__DIR__ . '/../AnnotationList.php'); $reader->addNamespace('JMS\SerializerBundle\Annotation'); return new AnnotationDriver($reader); }