public class SystemTextJsonSerializer : IGrainStorageSerializer
{
public BinaryData Serialize<T>(T input)
{
return new BinaryData(JsonSerializer.SerializeToUtf8Bytes(input));
}
public T Deserialize<T>(BinaryData input)
{
return input.ToObjectFromJson<T>();
}
}
2条答案
按热度按时间7xzttuei1#
您可以重写默认的GrainStorageSerializer以使用System.Text.Json,这允许在将JsonInclude特性应用于具有私有setter的属性时反序列化该属性,如下所示。
然后,您可以在配置环境时执行以下设置。实现使用System.Text.Json的IGrainStorageSerializer版本。在下面的示例中,我创建了实现接口的SystemTextJsonSerializer。
然后,您可以按如下方式配置GrainStorageSerializer。
m3eecexj2#
您可以将颗粒的状态设置为具有公共属性的单独的可序列化对象,并让Orleans将其作为IPersistentState注入到颗粒的构造函数中,如 * 入门 * 部分中Microsoft Learn上的颗粒持久性中所述。
请记住,不能在颗粒的构造函数中使用实际的状态数据。
如果需要在第一条消息被调度到粒度之前使用状态数据进行额外的内务处理,则实现OnActivateAsync。