diff --git a/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapter.php b/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapter.php index c9978d3..7cb8215 100644 --- a/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapter.php +++ b/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapter.php @@ -365,4 +365,11 @@ private function extractDateTimeFormat($source, $defaultValue = null) return $dateTimeFormat; } + + public function toObjectOfClass(array $data, $className) + { + $newInstance = new $className; + + return $this->toObject($data, $newInstance); + } } diff --git a/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapterInterface.php b/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapterInterface.php index b073be4..b500df6 100644 --- a/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapterInterface.php +++ b/src/Opensoft/SimpleSerializer/Adapter/ArrayAdapterInterface.php @@ -60,4 +60,14 @@ public function cleanUpExclusionStrategies(); * @return ArrayAdapterInterface */ public function setUnserializeMode($unserializeMode); + + /** + * Convert array to object of given classname + * This method implies that class constructor is public and does not require any parameters + * + * @abstract + * @param mixed $data + * @param string $className + */ + public function toObjectOfClass(array $data, $className); } diff --git a/src/Opensoft/SimpleSerializer/Serializer.php b/src/Opensoft/SimpleSerializer/Serializer.php index 8c47400..16cbb43 100644 --- a/src/Opensoft/SimpleSerializer/Serializer.php +++ b/src/Opensoft/SimpleSerializer/Serializer.php @@ -89,6 +89,8 @@ public function unserialize($data, $targetData = null) } if (is_object($targetData)) { return $this->arrayAdapter->toObject($unserializedData, $targetData); + } else if (is_string($targetData) && class_exists($targetData)) { + return $this->arrayAdapter->toObjectOfClass($unserializedData, $targetData); } else if (is_array($targetData)) { $this->level++; $result = array();