Почему TypeNameHandling игнорируется?
Есть следующий класс:
class Person
{
public Person(string firstName = "Jonh", string secondName = "Doe", int age = 55, Genders gender = Genders.Male)
{
FirstName = firstName;
SecondName = secondName;
Age = age;
Gender = gender;
}
public string FirstName { get; set; }
public string SecondName { get; set; }
public int Age { get; set; }
public Genders Gender { get; set; }
}
И его JSON-конвертер:
class PersonJSONConverter : JsonConverter<Person>
{
public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var obj = JObject.Load(reader);
return new Person(obj.GetValue("FirstName").ToString(), obj.GetValue("SecondName").ToString(), (int)obj.GetValue("Age"));
}
public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName(nameof(Person.FirstName));
writer.WriteValue(value.FirstName);
writer.WritePropertyName(nameof(Person.SecondName));
writer.WriteValue(value.SecondName);
writer.WritePropertyName(nameof(Person.Age));
writer.WriteValue(value.Age);
writer.WritePropertyName(nameof(Person.Gender));
writer.WriteValue(value.Gender.ToString());
writer.WriteEndObject();
}
}
Далее эти два класса используются следующим образом:
class Program
{
static void Main(string[] args)
{
Person p = new Person("Bob", "Werner", 55);
var setting = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string obj = JsonConvert.SerializeObject(p, Formatting.Indented, setting);
Console.WriteLine(obj);
}
}
Однако, при сериализации нет строки $type, т.е. TypeNameHandling игнорируется. Вопрос: в чем может быть причина и как исправить такое поведение?