Почему 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 игнорируется. Вопрос: в чем может быть причина и как исправить такое поведение?


Ответы (0 шт):