gitnik/jms-typed-properties-driver

允许您使用类型属性进行 JMS 序列化

0.0.1 2020-01-06 21:42 UTC

This package is auto-updated.

Last update: 2024-09-26 01:40:41 UTC


README

不要在生产环境中使用此软件。尽管基本案例有效,但我确信有许多未测试的边缘情况

用法

反序列化

class Make {
    private string $name;
}

class Car {
    private string $color;
    private Make $make;
}

$inputData = [
    'color' => 'red',
    'make' => [
        'name' => 'Tesla'
    ]
];

$serializer = SerializerBuilder::create()
    ->setMetadataDriverFactory(new TypedPropertiesDriverFactory())
    ->build();

$car = $serializer->deserialize(
   json_encode($inputData),
   Car::class,
   'json'

// interact with your Car object

);

序列化

class Make {
    public string $name;
}

class Car {
    public string $color;
    public Make $make;
}

$make = new Make();
$make->name = 'Tesla';

$car = new Car();
$car->make = $make;
$car->color = 'red';

$serializer = SerializerBuilder::create()
    ->setMetadataDriverFactory(new TypedPropertiesDriverFactory())
    ->build();

$json = $serializer->serialize(
   $car,
   'json'

/*
{
    "color": "red",
    "make": {
        "name": "Tesla"
    }
}
*/
);

工作原理

JMS/Serializer 有驱动程序的概念,用于收集对要(反)序列化的对象配置信息。一个例子是注解驱动程序,它通过注解读取配置。

此库所做的是,封装当前正在使用的任何驱动程序,并使用反射收集的类型信息增强“默认”驱动程序获取的信息。

这意味着您可以根据属性逐个迁移到类型提示属性,并且还可以混合不同的配置方式,如下所示

class Car {
    /**
     * @SerializedName("colour") 
     */
    private string $color;
}

限制

  1. 尽管它可以处理(反)序列化中的 null 值,但在反序列化过程中不允许省略已类型提示的属性,因为这些属性必须始终在访问之前初始化
  2. 与父库有关的一个长期问题是强制转换值而不是类型检查(schmittjoh/serializer#561)。此库对此行为没有影响