Serializer组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

Serializer组件

Serializer组件用于将对象转换为特定的格式(XML、JSON、YAML等),或者将对象转换为特定的格式。

为此,Serializer组件遵循以下简单模式。

正如你在上图中看到的,一个数组被用作中间的一个人。这样,编码器将只处理特定的转向格式数组反之亦然。同样,Normalizers将处理转向特定对象数组反之亦然。

序列化是一个复杂的主题,虽然这个组件可能不是在所有情况下都能工作,但在开发序列化和反序列化对象的工具时,它可能是一个有用的工具。

安装

你可以用两种不同的方式安装组件:

使用

使用Serializer组件非常简单。你只需要设置序列化器指定哪些Encoders和Normalizer是可用的:

1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址组件序列化器序列化器使用欧宝娱乐app下载地址组件序列化器编码器XmlEncoder使用欧宝娱乐app下载地址组件序列化器编码器JsonEncoder使用欧宝娱乐app下载地址组件序列化器标准化者GetSetMethodNormalizer编码器数组XmlEncoder (),JsonEncoder ());标准化者数组GetSetMethodNormalizer ());序列化器序列化器(标准化者编码器);

序列化对象

在这个例子中,假设你的项目中已经存在以下类:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
名称空间Acme私人年龄私人的名字/ /读取器公共函数getName()返回->名称;}公共函数getAge()返回->年龄;}/ / setter公共函数setName的名字->name =的名字;}公共函数setAge年龄->年龄=年龄;}}

现在,如果你想将这个对象序列化为JSON,你只需要使用之前创建的Serializer服务:

1 2 3 4 5 6 7 8 9
Acme \人();->setName (“foo”);->setAge (99);jsonContent序列化器->序列化(json的);// $jsonContent包含{"name":"foo","age":99}回声jsonContent//或在响应中返回它

的第一个参数serialize ()在这种情况下,对象是要序列化的,第二个是用来选择合适的编码器的吗JsonEncoder

反序列化一个对象

现在让我们看看如何做完全相反的事情。这一次,信息的类将以XML格式编码:

1 2 3 4 5 6 7 8
数据< < < EOF <人> <名称> foo < /名称> < > 99岁年龄< / > < > /人EOF;序列化器->反序列化(数据“Acme \人”“xml”);

在这种情况下,反序列化()需要三个参数:

  1. 要解码的信息
  2. 此信息将被解码到的类的名称
  3. 用于将该信息转换为数组的编码器

JMSSerializer

一个流行的第三方库,JMS序列化器,提供了更复杂的解决方案。这个库包括配置如何通过注释(以及YAML、XML和PHP)序列化/反序列化对象的能力,与Doctrine ORM集成,以及处理其他复杂情况(例如循环引用)。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。