如何使用 ActionResult 发送抽象类型的集合
Posted
技术标签:
【中文标题】如何使用 ActionResult 发送抽象类型的集合【英文标题】:How to send Collection of abstract types with ActionResult 【发布时间】:2020-12-26 04:50:33 【问题描述】:我正在尝试使用ActionResult
在Controller
中发回abstract
类型的集合。我不知道如何告诉序列化程序还包括派生类型的特定属性:
public abstract class Base
public int Idget;set;
public class D1:Base
public string D1Valueget;set;
public class D2:Base
public bool IsD2Valueget;set;
public async Task<ActionResult<IEnumerable<Base>>> GetAll()
var collection=new [] new D1 Id=1, D1Value="hi" ,new D2 Id=2, IsD2Value=true;
return StatusCode(200,collection);
我怎样才能以一种简单而优雅的方式达到这个结果。我已经检查了JsonSerializer
选项,但在我的情况下,我不是进行序列化的人。
我得到了什么
[ "Id":1 , "Id":2 ]
我想要什么
[ "Id":1,"D1Value":"hi" , "Id":2 , "IsD2Value":true ]
【问题讨论】:
能否请您编辑您的结果,因为它们是相同的。 这是一个错字,我的错。 @BercoviciAdrian,你可以把D1
和D2
放入List<object>
,然后直接返回,我已经更新了我的答案,希望对你有帮助。
【参考方案1】:
试试下面的代码:
public async Task<ActionResult<IEnumerable<Base>>> GetAll()
var collection = new List<object>()
new D1 Id = 1, D1Value = "hi" ,
new D2 Id = 2, IsD2Value = true
;
return StatusCode(200, collection);
这是测试结果:
【讨论】:
"I have checked the JsonSerializer options but in my case i am not the one that is doing the serialization."
@RafiHenig,好的,只是为了删除 JsonConvert.SerializeObject ,并直接返回List<object>
,我已经更新了我的答案。以上是关于如何使用 ActionResult 发送抽象类型的集合的主要内容,如果未能解决你的问题,请参考以下文章
获取 ArgumentException:升级到 .NET Core 2.2 后使用 ActionResult<JsonResult>> 作为返回类型的类型参数无效
Asp.net MVC 中Controller返回值类型ActionResult