Como posso adicionar uma restrição de tipo para incluir qualquer coisa serializável em um método genéric

Meu método genérico precisa serializar o objeto passado para ele, no entanto, apenas insistir que ele implementa ISerializable parece não funcionar. Por exemplo, eu tenho uma estrutura retornada de um serviço da Web (marcado com SerializableAttribute) que serializa para xml muito bem, mas, como esperado, o compilador C # reclam

Existe uma maneira de verificar se o objeto é serializável antes de tentar serializá-lo ou, melhor ainda, uma maneira de usar owhere palavra-chave para verificar se o objeto é adequado?

Aqui está o meu método completo:

public static void Push<T>(string url, T message)
        where T : ISerializable
{
    string xml = SerializeMessage(message);

    // Send the message to Amazon SQS
    SendMessageRequest sendReq = new SendMessageRequest { QueueUrl = url, MessageBody = xml };
    AmazonSQSClient client = new AmazonSQSClient(S3User, S3Pass);
    client.SendMessage(sendReq);
}

And SerializeMessage:

private static string SerializeMessage<T>(T message)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    using (StringWriter stringWriter = new StringWriter())
    {
        xmlSerializer.Serialize(stringWriter, message);
        return stringWriter.ToString();
    }
}

Se isso não for possível, qual é a melhor maneira de verificar se um objeto é serializável em tempo de execuçã

questionAnswers(8)

yourAnswerToTheQuestion