Как десериализовать абстрактный класс, который имеет много конкретных реализаций, переданных в качестве входных данных в метод 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 { ... }

Я надеюсь, что есть краткое решение, которое не требует специальных десериализаторов.

Любая помощь приветствуется! Спасибо

0 ответов

Другие вопросы по тегам