gitnik / jms-typed-properties-driver
允许您使用类型属性进行 JMS 序列化
0.0.1
2020-01-06 21:42 UTC
Requires
- php: >=7.4
- ext-json: *
- jms/serializer: ^3.4
Requires (Dev)
- phpunit/phpunit: ^8.4
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; }
限制
- 尽管它可以处理(反)序列化中的 null 值,但在反序列化过程中不允许省略已类型提示的属性,因为这些属性必须始终在访问之前初始化
- 与父库有关的一个长期问题是强制转换值而不是类型检查(schmittjoh/serializer#561)。此库对此行为没有影响