The documentation you are viewing is for Dapr v1.7 which is an older version of Dapr. For up-to-date documentation, see the latest version.
自定义序列化
如何配置序列化
Dapr 使用 JSON 序列化,因此发送/接收数据时会丢失(复杂) 类型信息。
序列化(Serialization)
当从控制器返回对象时,将对象传递到DaprClient
, 或将对象存储在一个store中, 只有公共属性被扫描和序列化。 您可以通过自定义 \Dapr\Serialization\ISerialization
来实现。 例如,如果您想要创建一个序列化为字符串的 ID 类型,您可以这样做:
<?php
class MyId implements \Dapr\Serialization\Serializers\ISerialize
{
public string $id;
public function serialize(mixed $value,\Dapr\Serialization\ISerializer $serializer): mixed
{
// $value === $this
return $this->id;
}
}
这适用于我们拥有完全所有权的任何类型,但它对库或PHP本身的类不适用。 为此,您需要在 DI 容器中注册一个自定义序列器:
<?php
// in config.php
class SerializeSomeClass implements \Dapr\Serialization\Serializers\ISerialize
{
public function serialize(mixed $value,\Dapr\Serialization\ISerializer $serializer) : mixed
{
// serialize $value and return the result
}
}
return [
'dapr.serializers.custom' => [SomeClass::class => new SerializeSomeClass()],
];
反序列化
除非接口是 \Dapr\Deserialization\Deserializers\IDeserialize
,否则反序列化的工作方式完全相同。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.