Use o atributo [Serializable] ou subclasse de MarshalByRefObject?

Eu gostaria de usar um objeto no AppDomain

Para isso, posso usar o atributo [Serializeable]:

[Serializable]
class MyClass
{
    public string GetSomeString() { return "someString" }
}

Or subclasse de MarshalByRefObject:

class MyClass: MarshalByRefObject
{
    public string GetSomeString() { return "someString" }
}

Nos dois casos, posso usar a classe assim:

AppDomain appDomain = AppDomain.CreateDomain("AppDomain");
MyClass myObject = (MyClass)appDomain.CreateInstanceAndUnwrap(
                   typeof(MyClass).Assembly.FullName,
                   typeof(MyClass).FullName);
Console.WriteLine(myObject.GetSomeString());

Por que as duas abordagens parecem ter o mesmo efeito? Qual é a diferença nas duas abordagens? Quando devo favorecer uma abordagem sobre a outra?

EDIT: Na superfície, eu sei que existem diferenças entre os dois mecanismos, mas se alguém pulasse de um arbusto e me fizesse a pergunta, eu não poderia dar uma resposta adequada. As perguntas são bastante abertas. Eu esperava que alguém pudesse explicar melhor do que e

questionAnswers(4)

yourAnswerToTheQuestion