Почему 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 не делает это самостоятельно согласно документации?