-
-
Notifications
You must be signed in to change notification settings - Fork 585
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #749 from schmittjoh/std-class-serialization
Added stdClass serialization handler
- Loading branch information
Showing
5 changed files
with
120 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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 characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
stdClass | ||
======== | ||
|
||
The serializer offers support for serializing ``stdClass`` objects, however the use of | ||
``stdClass`` objects is discouraged. | ||
|
||
The current implementation serializes all the properties of a ``stdClass`` object in | ||
the order they appear. | ||
|
||
There are may know limitations wen dealing with ``stdClass`` objects, | ||
more in detail, is not possible to: | ||
|
||
- change serialization order of properties | ||
- apply per-property exclusion policies | ||
- specify any extra serialization information for properties that are part of the ``stdClass`` object, as serialization name, type, xml structure and so on | ||
- deserialize data into ``stdClass`` objects |
This file contains 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 characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
<?php | ||
|
||
/* | ||
* Copyright 2016 Johannes M. Schmitt <[email protected]> | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
namespace JMS\Serializer\Handler; | ||
|
||
use JMS\Serializer\Context; | ||
use JMS\Serializer\GraphNavigator; | ||
use JMS\Serializer\Metadata\StaticPropertyMetadata; | ||
use JMS\Serializer\VisitorInterface; | ||
|
||
/** | ||
* @author Asmir Mustafic <[email protected]> | ||
*/ | ||
class StdClassHandler implements SubscribingHandlerInterface | ||
{ | ||
public static function getSubscribingMethods() | ||
{ | ||
$methods = array(); | ||
$formats = array('json', 'xml', 'yml'); | ||
|
||
foreach ($formats as $format) { | ||
$methods[] = array( | ||
'direction' => GraphNavigator::DIRECTION_SERIALIZATION, | ||
'type' => 'stdClass', | ||
'format' => $format, | ||
'method' => 'serializeStdClass', | ||
); | ||
} | ||
|
||
return $methods; | ||
} | ||
|
||
public function serializeStdClass(VisitorInterface $visitor, \stdClass $stdClass, array $type, Context $context) | ||
{ | ||
$classMetadata = $context->getMetadataFactory()->getMetadataForClass('stdClass'); | ||
$visitor->startVisitingObject($classMetadata, $stdClass, array('name' => 'stdClass'), $context); | ||
|
||
foreach ((array)$stdClass as $name => $value) { | ||
$metadata = new StaticPropertyMetadata('stdClass', $name, $value); | ||
$visitor->visitProperty($metadata, $value, $context); | ||
} | ||
|
||
return $visitor->endVisitingObject($classMetadata, $stdClass, array('name' => 'stdClass'), $context); | ||
} | ||
} |
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters