Utilizando DataContractSerializer para serializar, pero no puede deserializar de nuevo

Tengo las siguientes 2 funciones:

public static string Serialize(object obj)
{
    DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
    MemoryStream memoryStream = new MemoryStream();
    serializer.WriteObject(memoryStream, obj);
    return Encoding.UTF8.GetString(memoryStream.GetBuffer());
}

public static object Deserialize(string xml, Type toType)
{
    MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
   // memoryStream.Position = 0L;
    XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null);
    DataContractSerializer dataContractSerializer = new DataContractSerializer(toType);
    return dataContractSerializer.ReadObject(reader);
}

El primero parece serializar un objeto en una cadena xml muy bien. El XML parece válido, sin etiquetas rotas, sin espacios en blanco al principio o al final, etc. Ahora la segunda función no quiere deserializar mi cadena xml de nuevo al objeto. En la última línea me sale:

Hubo un error al deserializar el objeto de tipo [MI TIPO DE OBJETO AQUÍ]. Los datos en el nivel raíz no son válidos. Línea 1, posición 1.

¿Qué estoy haciendo mal? Intenté reescribir la función Deserializar varias veces, y siempre parece ser el mismo tipo de error. ¡Gracias

Oh, y así es como llamo a las 2 funciones:

SomeObject so = new SomeObject();
string temp = SerializationManager.Serialize(so);
so = (SomeObject)SerializationManager.Deserialize(temp, typeof(SomeObject));

Respuestas a la pregunta(4)

Su respuesta a la pregunta