Почему Json.NET не включает $ type для корневого объекта, когда TypeNameHandling имеет значение Auto?

Когда я устанавливаю в Json.NET сериализацию с TypeNameHandling, установленной в TypeNameHandling.Auto, он корректно устанавливает $ type для дочерних свойств объекта, но не делает этого для сериализуемого корневого объекта. Зачем?

Пожалуйста, обратите внимание на следующее воспроизведение:

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
    });

Json выбрасывается вjson переменная:

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

Json.NETДокументация говорит, что дляTypeNameHandling.Auto поведение это:

Включайте имя типа .NET, если тип сериализуемого объекта не совпадает с его объявленным типом.

Мой вопрос - почему фидо не имеет"$type": "MyApp.Dog, MyApp", как его щенок? :)

ОБНОВИТЬ: Я узнал из принятого ответа наэтот вопрос что я могу заставить $ type быть добавленным, выполнив это:

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

Но мой вопрос все еще остается в силе - почему Json.NET не делает это самостоятельно согласно документации?

Ответы на вопрос(3)

Ваш ответ на вопрос