/** * Create serializer * * @throws \Exception */ private function createSerializer() { $sb = SerializerBuilder::create(); if ($this->serializationVisitor) { $sb->setSerializationVisitor($this->format, $this->serializationVisitor); } else { // set format if ('json' === $this->format) { $sv = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy())); $sv->setOptions($this->jsonOptions); $sb->setSerializationVisitor($this->format, $sv); } else { if ('xml' === $this->format) { $sb->setSerializationVisitor('xml', new XmlSerializationVisitor(new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy()))); } else { throw new \Exception('Format "' . $this->format . '"is not supported and serializationVisitor is not net'); } } } // chache dir if ($this->cacheDir) { $sb->setCacheDir($this->cacheDir); } // debugging $sb->setDebug($this->debug); $this->serializer = $sb->build(); }
public function write(OutputInterface $output, $fileCollection) { $commentedFiles = $fileCollection->getCommentedFiles(); $jsonVisitor = new JsonSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy())); $jsonVisitor->setOptions(JSON_PRETTY_PRINT); $xmlVisitor = new XmlSerializationVisitor(new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy())); $serializer = SerializerBuilder::create()->setSerializationVisitor('json', $jsonVisitor)->setSerializationVisitor('xml', $xmlVisitor)->build(); if (!empty($this->outputFile)) { file_put_contents($this->outputFile, $serializer->serialize($commentedFiles, $this->outputFormat)); return; } $output->write($serializer->serialize($commentedFiles, $this->outputFormat)); }
/** * * @param string $cacheDir * @param string $metadataDir * @param bool $debug */ public function __construct($cacheDir, $metadataDir, $debug = false) { $serializerBuilder = SerializerBuilder::create(); $serializerBuilder->setCacheDir($cacheDir)->setDebug($debug)->addMetadataDir($metadataDir); $propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); $serializerBuilder->setPropertyNamingStrategy($propertyNamingStrategy); $serializerBuilder->addDefaultSerializationVisitors(); $serializerBuilder->addDefaultDeserializationVisitors(); $jsonSerializationVisitor = new JsonSerializationVisitor($propertyNamingStrategy); $jsonSerializationVisitor->setOptions(JSON_PRETTY_PRINT); $xmlSerializationVisitor = new XmlSerializationVisitor($propertyNamingStrategy); $xmlSerializationVisitor->setDefaultRootName('config'); $serializerBuilder->setSerializationVisitor('json', $jsonSerializationVisitor); $serializerBuilder->setSerializationVisitor('xml', $xmlSerializationVisitor); $this->serializer = $serializerBuilder->build(); }
/** * {@inheritDoc} */ public function getServiceConfig() { return array('aliases' => array('jms_serializer.metadata_driver' => 'jms_serializer.metadata.chain_driver', 'jms_serializer.object_constructor' => 'jms_serializer.unserialize_object_constructor'), 'factories' => array('jms_serializer.handler_registry' => new HandlerRegistryFactory(), 'jms_serializer.datetime_handler' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Handlers($options['jms_serializer']['handlers']); $dateTimeOptions = $options->getDatetime(); return new DateHandler($dateTimeOptions['default_format'], $dateTimeOptions['default_timezone']); }, 'jms_serializer.event_dispatcher' => new EventDispatcherFactory(), 'jms_serializer.metadata.cache' => new MetadataCacheFactory(), 'jms_serializer.metadata.yaml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\YamlDriver'), 'jms_serializer.metadata.xml_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\XmlDriver'), 'jms_serializer.metadata.php_driver' => new MetadataDriverFactory('JMS\\Serializer\\Metadata\\Driver\\PhpDriver'), 'jms_serializer.metadata.file_locator' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $directories = array(); foreach ($options->getDirectories() as $directory) { if (!isset($directory['path'], $directory['namespace_prefix'])) { throw new \RuntimeException(sprintf('The directory must have the attributes "path" and "namespace_prefix, "%s" given.', implode(', ', array_keys($directory)))); } $directories[rtrim($directory['namespace_prefix'], '\\')] = rtrim($directory['path'], '\\/'); } return new FileLocator($directories); }, 'jms_serializer.metadata.annotation_driver' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $reader = new AnnotationReader(); $reader = new CachedReader(new IndexedReader($reader), $sm->get($options->getAnnotationCache())); return new AnnotationDriver($reader); }, 'jms_serializer.metadata.chain_driver' => function (ServiceManager $sm) { $annotationDriver = $sm->get('jms_serializer.metadata.annotation_driver'); $phpDriver = $sm->get('jms_serializer.metadata.php_driver'); $xmlDriver = $sm->get('jms_serializer.metadata.xml_driver'); $yamlDriver = $sm->get('jms_serializer.metadata.yaml_driver'); return new DriverChain(array($yamlDriver, $xmlDriver, $phpDriver, $annotationDriver)); }, 'jms_serializer.metadata.lazy_loading_driver' => function (ServiceManager $sm) { return new LazyLoadingDriver($sm, 'jms_serializer.metadata_driver'); }, 'jms_serializer.metadata_factory' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Metadata($options['jms_serializer']['metadata']); $lazyLoadingDriver = $sm->get('jms_serializer.metadata.lazy_loading_driver'); return new MetadataFactory($lazyLoadingDriver, 'Metadata\\ClassHierarchyMetadata', $options->getDebug()); }, 'jms_serializer.camel_case_naming_strategy' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new PropertyNaming($options['jms_serializer']['property_naming']); return new CamelCaseNamingStrategy($options->getSeparator(), $options->getLowercase()); }, 'jms_serializer.identical_naming_strategy' => function (ServiceManager $sm) { return new IdenticalPropertyNamingStrategy(); }, 'jms_serializer.serialized_name_annotation_strategy' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); if (isset($options['jms_serializer']['naming_strategy'])) { if ($options['jms_serializer']['naming_strategy'] == 'identical') { return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.identical_naming_strategy')); } } return new SerializedNameAnnotationStrategy($sm->get('jms_serializer.camel_case_naming_strategy')); }, 'jms_serializer.naming_strategy' => 'JMSSerializerModule\\Service\\NamingStrategyFactory', 'jms_serializer.json_serialization_visitor' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Visitors($options['jms_serializer']['visitors']); $jsonOptions = $options->getJson(); $vistor = new JsonSerializationVisitor($sm->get('jms_serializer.naming_strategy')); $vistor->setOptions($jsonOptions['options']); return $vistor; }, 'jms_serializer.json_deserialization_visitor' => function (ServiceManager $sm) { return new JsonDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor')); }, 'jms_serializer.xml_serialization_visitor' => function (ServiceManager $sm) { return new XmlSerializationVisitor($sm->get('jms_serializer.naming_strategy')); }, 'jms_serializer.xml_deserialization_visitor' => function (ServiceManager $sm) { $options = $sm->get('Configuration'); $options = new Visitors($options['jms_serializer']['visitors']); $xmlOptions = $options->getXml(); $visitor = new XmlDeserializationVisitor($sm->get('jms_serializer.naming_strategy'), $sm->get('jms_serializer.object_constructor')); $visitor->setDoctypeWhitelist($xmlOptions['doctype_whitelist']); return $visitor; }, 'jms_serializer.yaml_serialization_visitor' => function (ServiceManager $sm) { return new YamlSerializationVisitor($sm->get('jms_serializer.naming_strategy')); }, 'jms_serializer.serializer' => 'JMSSerializerModule\\Service\\SerializerFactory'), 'invokables' => array('jms_serializer.unserialize_object_constructor' => 'JMS\\Serializer\\Construction\\UnserializeObjectConstructor', 'jms_serializer.array_collection_handler' => 'JMS\\Serializer\\Handler\\ArrayCollectionHandler', 'jms_serializer.doctrine_proxy_subscriber' => 'JMS\\Serializer\\EventDispatcher\\Subscriber\\DoctrineProxySubscriber')); }
/** * @return Serializer */ private function getSerializer() { if ($this->serializer) { return $this->serializer; } $propertyNamingStrategy = new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()); $visitor = new JsonSerializationVisitor($propertyNamingStrategy); $visitor->setOptions(JSON_UNESCAPED_UNICODE); return $this->serializer = SerializerBuilder::create()->setPropertyNamingStrategy($propertyNamingStrategy)->configureHandlers(function (HandlerRegistryInterface $registry) { $registry->registerSubscribingHandler(new CarbonHandler()); $registry->registerSubscribingHandler(new RecurringHandler()); $registry->registerSubscribingHandler(new DependsHandler($this)); })->addDefaultHandlers()->setSerializationVisitor('json', $visitor)->addDefaultDeserializationVisitors()->build(); }
/** * @return Serializer */ protected function getSerializer() { if (null === $this->serializer) { $strategy = new SerializedNameAnnotationStrategy(new IdenticalPropertyNamingStrategy()); if (defined('JSON_UNESCAPED_SLASHES')) { $jsonSerializer = new JsonSerializationVisitor($strategy); $jsonSerializer->setOptions(JSON_UNESCAPED_SLASHES); } else { $jsonSerializer = new \Nuxeo\Client\Internals\Spi\Serializer\JsonSerializationVisitor($strategy); } $jsonSerializer->setOptions($jsonSerializer->getOptions() | JSON_FORCE_OBJECT); $self = $this; $this->serializer = SerializerBuilder::create()->setSerializationVisitor('json', $jsonSerializer)->setDeserializationVisitor('json', new JsonDeserializationVisitor($strategy))->configureHandlers(function (HandlerRegistry $registry) use($self) { foreach ($self->getMarshallers() as $type => $marshaller) { $registry->registerHandler(GraphNavigator::DIRECTION_SERIALIZATION, $type, 'json', function (VisitorInterface $visitor, $object, array $type) use($self) { $marshaller = $self->getMarshaller($type['name']); return $marshaller->write($object); }); $registry->registerHandler(GraphNavigator::DIRECTION_DESERIALIZATION, $type, 'json', function (VisitorInterface $visitor, $object, array $type) use($self) { $marshaller = $self->getMarshaller($type['name']); return $marshaller->read($object); }); } })->build(); } return $this->serializer; }