Article.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace JMS\Serializer\Tests\Fixtures;
  3. use JMS\Serializer\Annotation\HandlerCallback;
  4. use JMS\Serializer\Context;
  5. use JMS\Serializer\JsonDeserializationVisitor;
  6. use JMS\Serializer\JsonSerializationVisitor;
  7. use JMS\Serializer\XmlDeserializationVisitor;
  8. use JMS\Serializer\XmlSerializationVisitor;
  9. use JMS\Serializer\YamlSerializationVisitor;
  10. use Symfony\Component\Yaml\Inline;
  11. class Article
  12. {
  13. public $element;
  14. public $value;
  15. /** @HandlerCallback("xml", direction = "serialization") */
  16. public function serializeToXml(XmlSerializationVisitor $visitor, $data, Context $context)
  17. {
  18. if (null === $visitor->document) {
  19. $visitor->document = $visitor->createDocument(null, null, false);
  20. }
  21. $visitor->document->appendChild($visitor->document->createElement($this->element, $this->value));
  22. }
  23. /** @HandlerCallback("json", direction = "serialization") */
  24. public function serializeToJson(JsonSerializationVisitor $visitor)
  25. {
  26. $visitor->setRoot(array($this->element => $this->value));
  27. }
  28. /** @HandlerCallback("yml", direction = "serialization") */
  29. public function serializeToYml(YamlSerializationVisitor $visitor)
  30. {
  31. $visitor->writer->writeln(Inline::dump($this->element) . ': ' . Inline::dump($this->value));
  32. }
  33. /** @HandlerCallback("xml", direction = "deserialization") */
  34. public function deserializeFromXml(XmlDeserializationVisitor $visitor, \SimpleXMLElement $data)
  35. {
  36. $this->element = $data->getName();
  37. $this->value = (string)$data;
  38. }
  39. /** @HandlerCallback("json", direction = "deserialization") */
  40. public function deserializeFromJson(JsonDeserializationVisitor $visitor, array $data)
  41. {
  42. $this->element = key($data);
  43. $this->value = reset($data);
  44. }
  45. }