Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对一个抽象类进行反序列化,这个抽象类有许多具体的实现作为C#ApiController方法的输入传递_C#_Json_Serialization_Asp.net Web Api_Asp.net Apicontroller - Fatal编程技术网

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

如何对一个抽象类进行反序列化,这个抽象类有许多具体的实现作为C#ApiController方法的输入传递,c#,json,serialization,asp.net-web-api,asp.net-apicontroller,C#,Json,Serialization,Asp.net Web Api,Asp.net Apicontroller,我有一个APIController,它的一个方法需要一个[FromBody]列表。AbstractEntity是一个抽象类,它由我们称它们为ConcreteEntity1和ConcreteEntity2来实现。C#.NET中的这种设置是如何实现反序列化的?在我的json中,一切都很好,但是APIController方法中传递了一个空的对象列表 下面是该方法的外观: [HttpPut] [Route("x/y/z")] public void SomeMethod([FromBody] List&

我有一个APIController,它的一个方法需要一个
[FromBody]列表
。AbstractEntity是一个抽象类,它由我们称它们为ConcreteEntity1和ConcreteEntity2来实现。C#.NET中的这种设置是如何实现反序列化的?在我的json中,一切都很好,但是APIController方法中传递了一个空的对象列表

下面是该方法的外观:

[HttpPut]
[Route("x/y/z")]
public void SomeMethod([FromBody] List<AbstractEntity> entities) { ... }
我希望有一个简洁的解决方案,不涉及自定义反序列化


感谢您的帮助!谢谢

确认一下,您正在使用,对吗?@dbc我想是这样的-我的控制器扩展了System.Web.Http.ApiController,它是一个没有视图的纯json输入/输出控制器回答您的问题吗?您也可以检查或寻找其他解决方案。@dbc所有这些都基于自定义json反序列化程序,对吗?我期待一个更简单的解决方案/配置。在问题中,请看第二个答案,它使用
typenameholling.Auto
@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 { ... }