¿Por qué Json.NET no incluye $ type para el objeto raíz cuando TypeNameHandling es Auto?

Cuando configuro Json.NET para serializar con TypeNameHandling establecido en TypeNameHandling.Auto, establece correctamente $ type para las propiedades secundarias de un objeto, pero no lo hace para el objeto raíz que se serializa. ¿Por qué?

Por favor considere la siguiente repro:

public class Animal
{
    public Animal[] Offspring { get; set; }
}

public class Dog : Animal {}

Animal fido = new Dog
{
    Offspring = new Animal[] { new Dog() }
};

var json = JsonConvert.SerializeObject(fido, 
    new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.Auto
    });

El Json emitido en eljson variable es:

{
    "Offspring": [{
        "$type": "MyApp.Dog, MyApp",
        "Offspring": null
    }]
}

El Json.NETDocumentación dice que paraTypeNameHandling.Auto el comportamiento es:

Incluya el nombre del tipo .NET cuando el tipo del objeto que se está serializando no es el mismo que el tipo declarado.

Mi pregunta es: ¿por qué el fido no tiene"$type": "MyApp.Dog, MyApp", como su cachorro? :)

ACTUALIZAR: Me he enterado por la respuesta aceptada aesta pregunta que puedo forzar que se agregue $ type al hacer esto:

var json = JsonConvert.SerializeObject(fido,
    typeof(Animal),
    new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.Auto,
        Formatting = Formatting.Indented
    });

Pero mi pregunta sigue siendo válida: ¿por qué Json.NET no hace esto por sí solo según la documentación?

Respuestas a la pregunta(3)

Su respuesta a la pregunta