Я реализую службу веб-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. Кто-нибудь столкнулся с этой проблемой и придумал что-нибудь?