Как десериализовать абстрактный класс, который имеет много конкретных реализаций, переданных в качестве входных данных в метод C# ApiController
У меня есть APIController, что один из его методов ожидает [FromBody] List<AbstractEntity>
, AbstractEntity является абстрактным классом, и он реализован, давайте назовем их ConcreteEntity1 и ConcreteEntity2. Как это настроить в C# .NET, чтобы десериализация работала? В моем json все нормально, но пустой метод передается в метод APIController.
Вот как выглядит метод:
[HttpPut]
[Route("x/y/z")]
public void SomeMethod([FromBody] List<AbstractEntity> entities) { ... }
В Java Spring это то, как я устанавливал это в прошлом: у меня есть переменная nodeClass в каждой из конкретных реализаций, с которой проверяется, поэтому во время десериализации выбирается правильный класс. В абстрактной сущности я помещаю эти аннотации вверху класса:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "nodeClass"
)
@JsonSubTypes({
@JsonSubTypes.Type(value = ConcreteEntity1.class, name="Concrete1"),
@JsonSubTypes.Type(value = ConcreteEntity2.class, name="Concrete2"),
})
public abstract class AbstractEntity { ... }
Я надеюсь, что есть краткое решение, которое не требует специальных десериализаторов.
Любая помощь приветствуется! Спасибо