// PersistentPayload
        private CustomSerialization.Protobuf.Msg.PersistentPayload PersistentPayloadBuilder(object payload)
        {
            var persistentPayload = new CustomSerialization.Protobuf.Msg.PersistentPayload();

            if (payload == null)
            {
                return(persistentPayload);
            }

            var serializer = system.Serialization.FindSerializerFor(payload);

            if (serializer is SerializerWithStringManifest serializerManifest)
            {
                var manifest = serializerManifest.Manifest(payload);
                if (!manifest.Equals(Persistent.Undefined))
                {
                    persistentPayload.MessageManifest = ByteString.CopyFromUtf8(manifest);
                }
            }
            else
            {
                if (serializer.IncludeManifest)
                {
                    persistentPayload.MessageManifest = ByteString.CopyFromUtf8(payload.GetType().TypeQualifiedName());
                }
            }

            persistentPayload.Message      = ByteString.CopyFrom(serializer.ToBinary(payload));
            persistentPayload.SerializerId = serializer.Identifier;
            return(persistentPayload);
        }
 private object PayloadFromProto(CustomSerialization.Protobuf.Msg.PersistentPayload persistentPayload)
 {
     return(system.Serialization.Deserialize(
                persistentPayload.Message.ToByteArray(),
                persistentPayload.SerializerId,
                persistentPayload.MessageManifest.ToStringUtf8()));
 }