Я реализую службу веб-API 2, которая использует JSON.NET для сериализации.
Когда я пытаюсь обновить json-данные PUT (deseralize), абстрактный класс отсутствует, потому что он не знал, что с ним делать, поэтому ничего не делал. Я также попытался сделать класс NOT абстрактным и просто наследовать от него, а затем каждый PUT был обработан в базовом классе, а не в классе derrive, у которого отсутствуют свойства класса derrive.
Пример:
public class People
{
      // other attributes removed for demonstration simplicity
      public List<Person> People { get;set; }
}
public abstract class Person
{
      public string Id {get;set;}
      public string Name {get;set;}
}
public class Employee : Person 
{
      public string Badge {get;set;}
}
public class Customer : Person
{
     public string VendorCategory {get;set;}
}
с моим веб-api, настроенным на обработку имен типов:
public static void Register(HttpConfiguration config)
{
     config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = 
            TypeNameHandling.Objects;
}
затем я PUT JSON, как:
{
     people: [{
          name: "Larry",
          id: "123",
          badge: "12345",
          $type: "API.Models.Employee, API"
     }]
}
для метода web api:
public HttpResponseMessage Put(string id, [FromBody]People value)
{
      people.Update(value); // MongoDB Repository method ( not important here )
      return Request.CreateResponse(HttpStatusCode.OK);
}
 но вывод при проверке value всегда:
People == { People: [] }
или если не абстрактный:
People == { People: [{ Name: "Larry", Id: "123" }] }
отсутствует свойство inheritited. Кто-нибудь столкнулся с этой проблемой и придумал что-нибудь?