Symfony Serializer component: Deserialize array of objects of mixed types

jrs*_*gtr 6 php serializer symfony

I would like to know if there is a method to deserialize an array containing objects of different types. I built something where I can serialize and deserialize an array of objects of a specific type like this:

$nodes = [
    new PostNode(),
    new PostNode(),
    new PostNode()
];

$serializer = new Serializer( [
    new ObjectNormalizer(),
    new ArrayDenormalizer(),
], [ new JsonEncoder() ] ); 

$data = $serializer->serialize($nodes, 'json');

$deSerializedNodes = $serializer->deserialize( $data, PostNode::class . '[]', 'json' );
Run Code Online (Sandbox Code Playgroud)

我得到的正是插入的数组,所以很好。现在,我想知道是否可以像这样对一个数组进行序列化和反序列化:

$nodes = [
    new PostNode(),
    new PostNode(),
    new PostNode(),
    new FormNode(),
    new FormNode()
];
Run Code Online (Sandbox Code Playgroud)

小智 3

您只能序列化多个对象类型的数组,如下所示:

$serializer = new Serializer([new GetSetMethodNormalizer(), new ArrayDenormalizer()], [new JsonEncoder()]);

$array = [new Foo('Radhi'), new Bar(26)];

$json = $serializer->serialize($array, 'json');
Run Code Online (Sandbox Code Playgroud)

但是对于反序列化不同对象类型的数组,序列化程序并不清楚,特别是对于具有相同 getter/setter 方法名称的对象,因此我认为您需要针对该特定用例进行一些额外的配置。

检查序列化接口和抽象类以获取更多详细信息。