浏览代码

handle deserialization on the class itself

Lukas Kahwe Smith 13 年之前
父节点
当前提交
935f554a8e
共有 1 个文件被更改,包括 11 次插入4 次删除
  1. 11 4
      Serializer/GraphNavigator.php

+ 11 - 4
Serializer/GraphNavigator.php

@@ -22,6 +22,7 @@ use JMS\SerializerBundle\Metadata\ClassMetadata;
 use Metadata\MetadataFactoryInterface;
 use JMS\SerializerBundle\Serializer\Exclusion\ExclusionStrategyInterface;
 use JMS\SerializerBundle\Serializer\Handler\SerializationHandlerInterface;
+use JMS\SerializerBundle\Serializer\Handler\DeserializationHandlerInterface;
 
 final class GraphNavigator
 {
@@ -70,11 +71,17 @@ final class GraphNavigator
 
             $handled = false;
 
-            if ($data instanceof SerializationHandlerInterface) {
-                $rs = $data->serialize($visitor, $data, $type, $handled);
-                if ($handled) {
-                    return $rs;
+            if ($isSerialization) {
+                if ($data instanceof SerializationHandlerInterface) {
+                    $rs = $data->serialize($visitor, $data, $type, $handled);
                 }
+            } elseif (in_array('JMS\SerializerBundle\Serializer\Handler\DeserializationHandlerInterface', class_implements($type))) {
+                $handler = new $type;
+                $rs = $handler->deserialize($visitor, $data, $type, $handled);
+            }
+
+            if ($handled) {
+                return $rs;
             }
 
              // try custom handler