Por que o Json.NET não inclui $ type para o objeto raiz quando TypeNameHandling é Auto?

Quando defino o Json.NET para serializar com TypeNameHandling definido como TypeNameHandling.Auto, ele define corretamente $ type para as propriedades filho de um objeto, mas não o faz para o objeto raiz que está sendo serializado. Por quê?

Considere o seguinte 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
    });

O Json emitido nojson variável é:

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

O Json.NETDocumentação diz que paraTypeNameHandling.Auto o comportamento é:

Inclua o nome do tipo .NET quando o tipo do objeto que está sendo serializado não for o mesmo que o tipo declarado.

Minha pergunta é - Por que o fido não tem"$type": "MyApp.Dog, MyApp", como seu filhote? :)

ATUALIZAR: Eu descobri a partir da resposta aceita paraessa questão que posso forçar a adição de $ type, fazendo o seguinte:

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

Mas minha pergunta ainda se mantém: por que o Json.NET não faz isso sozinho, de acordo com a documentação?

questionAnswers(3)

yourAnswerToTheQuestion