thunderer/serializard

灵活的序列化器

v0.4.0 2021-01-15 17:48 UTC

This package is auto-updated.

Last update: 2024-09-16 01:30:36 UTC


README

Build Status Latest Stable Version License Scrutinizer Code Quality Code Coverage Dependency Status

Serializard是一个用于任何复杂度数据(反)序列化的库。它的主要目标是尽可能地为用户提供灵活性,通过将(反)序列化逻辑委托给程序员,以鼓励良好的对象设计,并仅监督过程,隐藏有关其的不愉快细节。

安装

此库在Composer/Packagist中可用,名称为thunderer/serializard

使用方法

让我们考虑一个具有两个属性和一些设置代码的简单User类

final class User
{
    private $id;
    private $name;

    public function __construct(int $id, string $name) { /* ... */ }

    public function getId() { return $this->id; }
    public function getName() { return $this->name; }
}

$user = new User(1, 'Thomas');

$formats = new FormatContainer();
$formats->add('json', new JsonFormat());

$hydrators = new FallbackHydratorContainer();
$normalizers = new FallbackNormalizerContainer();
$serializard = new Serializard($formats, $normalizers, $hydrators);

序列化

序列化由注册在标准化阶段使用的处理程序控制

$normalizers->add(User::class, function(User $user) {
    return [
        'id' => $user->getId(),
        'name' => $user->getName(),
    ];
});

$result = $serializard->serialize($user, 'json');
// result is {"id":1,"name":"Thomas"}

反序列化

反序列化可以通过注册从输入文本解析的数据重建对象的调用者来控制

$hydrators->add(User::class, function(array $data) {
    return new User($data['id'], $data['name']);
});

$json = '{"id":1,"name":"Thomas"}';
$user = $serializard->unserialize($json, User::class, 'json');

格式

  • JSONJsonFormat中将对象转换为JSON
  • 数组ArrayFormat中仅返回规范化到标量数组的对象图
  • YAMLYamlFormat中将对象转换为YAML(使用symfony/yaml
  • XMLXmlFormat中将对象转换为XML(使用ext-dom

许可证

请参阅此库主目录中的LICENSE文件。