private T GetMessage <T>(MediatorSerializedObject mediatorSerializedObject) where T : class
        {
            if (mediatorSerializedObject is null)
            {
                throw new ArgumentNullException(nameof(mediatorSerializedObject));
            }

            if (mediatorSerializedObject.AssemblyQualifiedName is null)
            {
                throw new ArgumentNullException(nameof(mediatorSerializedObject.AssemblyQualifiedName));
            }

            var type = Type.GetType(mediatorSerializedObject.AssemblyQualifiedName);

            if (type is null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (!(JsonSerializer.Deserialize(mediatorSerializedObject.Data, type, BaseJsonOptions.GetJsonSerializerOptions) is T notification))
            {
                throw new ArgumentNullException(nameof(notification));
            }

            return(notification);
        }
        public Task ExecuteEvent(MediatorSerializedObject mediatorSerializedObject)
        {
            var notification = GetMessage <INotification>(mediatorSerializedObject);

            return(_mediator.Publish(notification));
        }
        public Task ExecuteCommand(MediatorSerializedObject mediatorSerializedObject)
        {
            var request = GetMessage <IRequest>(mediatorSerializedObject);

            return(_mediator.Send(request));
        }