三迈/json-serializer

灵活的JSON序列化器

0.2.6 2024-02-17 11:00 UTC

This package is auto-updated.

Last update: 2024-09-17 12:13:17 UTC


README

Latest Stable Version Coverage Status

这个库是围绕 jms/serializer 的一个轻量级封装。

该库的目的是简化对象的反序列化和序列化,特别是对象的数组和标量值。你所需要做的就是遵循一个简单的协议。

项目列表

JMS Serializer 默认支持反序列化数组,但由于用户必须指定完整的类型,如 array<T>,因此它略微复杂。这个库通过提供一种两方法协议来抽象掉这种额外的复杂性。

例如,反序列化此对象

use JSONSerializer\Contracts\ItemList;

class ItemListExample implements ItemList
{
    /** @var ItemExample[] */
    public $items = [];

    public static function getListType(): string
    {
        return ItemExample::class;
    }

    public static function withList(array $list)
    {
        $itemList = new self();
        $itemList->items = $list;

        return $itemList;
    }
}

从JSON数组

[
    {"name": "foo"},
    {"name": "bar"}
]

使用一个熟悉的方法

use JSONSerializer\Serializer;

$serializer = new Serializer();

$result = $serializer->deserialize($json, ItemListExample::class);

将在 $result 中留下一个 ItemListExample 实例,其中 $result->items 填充了与源数组中的两个项目。

标量值

还有一个类似的便利接口称为 ScalarValue,用于帮助反序列化包装的原始标量值。

use JSONSerializer\Contracts\ScalarValue;

class ScalarValueExample implements ScalarValue
{
    /** @var int */
    public $value;

    public static function withValue($value)
    {
        $item = new self();
        $item->value = $value;

        return $item;
    }

    public static function getType(): string
    {
        return 'int';
    }
}