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.
Custom Serialization
Dapr uses JSON serialization and thus (complex) type information is lost when sending/receiving data.
Serialization
When returning an object from a controller, passing an object to the DaprClient
, or storing an object in a state store,
only public properties are scanned and serialized. You can customize this behavior by implementing \Dapr\Serialization\ISerialize
.
For example, if you wanted to create an ID type that serialized to a string, you may implement it like so:
<?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;
}
}
This works for any type that we have full ownership over, however, it doesn’t work for classes from libraries or PHP itself. For that, you need to register a custom serializer with the DI container:
<?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()],
];
Deserialization
Deserialization works exactly the same way, except the interface is \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.