bartoszbartniczak / symfony-serializer-arrayobject-normalizer
用于 Symfony/Serializer 组件的 ArrayObject Normalizer。此 Normalizer 与 ArrayObject 对象及其子类一起工作。
dev-master
2024-06-10 08:13 UTC
Requires
- php: >=5.6
- symfony/serializer: ^3.0|^4.0|^5.0|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: 5.*
- satooshi/php-coveralls: *
- symfony/property-access: ~2.8|~3.0
This package is auto-updated.
Last update: 2024-09-10 08:41:19 UTC
README
用于 Symfony/Serializer 组件的 ArrayObject Normalizer。此 Normalizer 与 ArrayObject 对象及其子类一起工作。
配置
use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use BartoszBartniczak\SymfonySerializer\Normalizer\ArrayObjectNormalizer; $normalizers = [ new ArrayObjectNormalizer(), //add ArrayObjectNoralizer to the normalizers array new ObjectNormalizer(), ]; $encoders = [ new JsonEncoder() ]; $serializer = new Serializer($normalizers, $encoders);
示例
简单 ArrayObject (反)序列化
$json = $serializer->serialize(new \ArrayObject(['a' => 1, 'c' => 3, 'e' => 5, 'g' => 7]), 'json');
现在 $json 变量应包含此 JSON 文档
{ "a": 1, "c": 3, "e": 5, "g": 7 }
现在您可以反序列化此 JSON 对象回 \ArrayObject
$serializer->deserialize($json, \ArrayObject::class, 'json');
对象数组(反)序列化
如果 \ArrayObject 包含某个类的对象,您需要为反序列化定义类型。
$arrayOfObjects = new \ArrayObject([ 'einstein' => new Person('Albert Einstein'), 'tesla' => new Person('Nikola Tesla') ]); $json = $serializer->serialize($arrayOfObjects, 'json'); // deserialization $deserializedObject = $serializer->deserialize($json, \ArrayObject::class.'<Person>', 'json');
子类(扩展 \ArrayObject 类)
此 Normalizer 支持对象的继承。您可以扩展 \ArrayObject(例如,添加一些方法),并且此 Normalizer 仍然能够(反)序列化对象。
<?php class PersonArray extends \ArrayObject{ } $arrayOfObjects = new PersonArray([ 'einstein' => new Person('Albert Einstein'), 'tesla' => new Person('Nikola Tesla') ]); $json = $serializer->serialize($arrayOfObjects, 'json'); // deserialization $deserializedObject = $serializer->deserialize($json, PersonArray::class.'<Person>', 'json');
对于其他示例,请查看集成测试。
测试
单元测试
要运行单元测试,请执行以下命令
php vendor/phpunit/phpunit/phpunit --configuration tests/unit-tests/configuration.xml
集成测试
要运行集成测试,请执行以下命令
php vendor/phpunit/phpunit/phpunit --configuration tests/integration-tests/configuration.xml