Warum enthält Json.NET nicht $ type für das Stammobjekt, wenn TypeNameHandling auf Auto eingestellt ist?

Wenn ich Json.NET so einstelle, dass es mit TypeNameHandling auf TypeNameHandling.Auto serialisiert wird, wird $ type für untergeordnete Eigenschaften eines Objekts korrekt festgelegt, dies jedoch nicht für das zu serialisierende Stammobjekt. Warum

Bitte beachten Sie den folgenden Hinweis:

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

The Json emittiert in diejson Variable ist:

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

The Json.NETDokumentatio sagt das fürTypeNameHandling.Auto das Verhalten ist:

Geben Sie den .NET-Typnamen an, wenn der Typ des zu serialisierenden Objekts nicht dem deklarierten Typ entspricht.

Meine Frage ist - Warum hat Fido nicht"$type": "MyApp.Dog, MyApp", wie sein Welpe? :)

AKTUALISIEREN Ich habe aus der akzeptierten Antwort auf @ herausgefunddiese Frag dass ich das Hinzufügen von $ type erzwingen kann:

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

Aber meine Frage bleibt bestehen - Warum macht Json.NET das nicht wie in der Dokumentation beschrieben?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage