如何反序列化具有许多具体实现的抽象类作为C#ApiController方法的输入传递

时间:2016-03-22 14:57:42

标签: c# json serialization asp.net-web-api asp.net-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 个答案:

没有答案