自定义序列化
如何配置序列化
Dapr 使用 JSON 序列化,因此发送/接收数据时会丢失(复杂) 类型信息。
序列化(Serialization)
当从控制器返回对象时,将对象传递到DaprClient
,或将对象存储在状态存储中,只有公共属性被扫描和序列化。 您可以通过实现\Dapr\Serialization\ISerialize
来自定义此行为。
例如,如果您想要创建一个序列化为字符串的 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.