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?