¿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?