Drupal的序列化和反序列化用的是 symfony/serializer
服务
$serializer = \Drupal::service("serializer");
Node序列化成xml.
$node = node_load(1);
$serializer = \Drupal::service("serializer");
$xml = $serializer->serialize($node, 'xml');
// 再解析回来
$deserializedData = $serializer->deserialize($xml, $node::class, 'xml');
dpm($deserializedData);
解析XML为数组
$data = <<<EOF
<?xml version="1.0"?>
<response><userid>1</userid><username>xiukunabcd</username></response>
EOF;
$serializer = \Drupal::service("serializer");
$deserializedData = $serializer->decode($data, 'xml');
dpm($deserializedData);
定义csv解析和反解析, 先定义一个服务:
services:
mymodule.encoder.csv:
class: Drupal\mymodule\Encoder\CsvEncoder
tags:
- { name: encoder, format: csv }
目录在src/Encoder/CsvEncoder.php
<?php
namespace Drupal\rest_output\Encoder;
class CsvEncoder extends \Symfony\Component\Serializer\Encoder\CsvEncoder {
protected $format = 'csv';
public function decode(string $data, string $format, array $context = []): mixed
{
$context[CsvEncoder::AS_COLLECTION_KEY] = false;
return parent::decode($data, $format, $context); // TODO: Change the autogenerated stub
}
}
测试
$node = node_load(1);
$serializer = \Drupal::service("serializer");
$xml = $serializer->serialize($node, 'csv');
$deserializedData = $serializer->deserialize($xml, $node::class, 'csv');
dpm($deserializedData);
在目录中vendor/symfony/serializer/Encoder还可能看到有yaml的解析。 可以使用上面代码复写