bartoszbartniczak/symfony-serializer-arrayobject-normalizer

用于 Symfony/Serializer 组件的 ArrayObject Normalizer。此 Normalizer 与 ArrayObject 对象及其子类一起工作。

dev-master 2024-06-10 08:13 UTC

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