¿Cuáles son las diferencias entre XmlSerializer y BinaryFormatter?

Pasé una buena parte del tiempo la semana pasada trabajando en la serialización. Durante ese tiempo encontré muchos ejemplos utilizando BinaryFormatter o XmlSerializer. Desafortunadamente, lo que no encontré fueron ejemplos que detallan de manera integral las diferencias entre los dos.

La génesis de mi curiosidad radica en por qué el BinaryFormatter puede deserializarse directamente a una interfaz, mientras que el XmlSerializer no lo es.Jon Skeet en una respuesta a "casting a múltiples (tipos desconocidos) en tiempo de ejecución"proporciona un ejemplo de serialización binaria directa a una interfaz.Stan R. me proporcionó los medios para lograr mi objetivo utilizando el XmlSerializer en su respuesta a "Deserialización de objetos XML a la interfaz. "

Más allá de lo obvio, BinaryFormatter utiliza la serialización binaria, mientras que XmlSerializer usa XML, me gustaría entender mejor las diferencias fundamentales. Cuándo usar uno u otro y los pros y contras de cada uno.