Asp.net core 如何使用ActionResult发送抽象类型集合

Asp.net core 如何使用ActionResult发送抽象类型集合,asp.net-core,serialization,jsonserializer,derived-types,Asp.net Core,Serialization,Jsonserializer,Derived Types,我试图使用ActionResult在控制器中发回抽象类型的集合。我不知道如何告诉序列化程序也包括派生类型特定的属性: public abstract class Base { public int Id{get;set;} } public class D1:Base { public string D1Value{get;set;} } public class D2:Base { public bool IsD2Value{get;set;} } public as

我试图使用
ActionResult
控制器中发回
抽象类型的集合。我不知道如何告诉序列化程序也包括派生类型特定的属性:

public abstract class Base
{
    public int Id{get;set;}
}
public class D1:Base
{
    public string D1Value{get;set;}
}
public class D2:Base
{
    public bool IsD2Value{get;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);
}
我想要什么

[{ "Id":1} ,  { "Id":2 }]
[{ "Id":1,"D1Value":"hi" } ,  { "Id":2 , "IsD2Value":true }]

请尝试以下代码:

 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);
        }

公共异步任务

请尝试以下代码:

 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);
        }

public async Task

你能编辑你的结果吗,因为它们都是一样的。这是一个打字错误,我的错。@BercoviciAdrian,你可以把
D1
D2
放入
列表
,然后直接返回,我已经更新了我的答案,希望它能帮助你。你能编辑你的结果吗,因为它们都是一样的。这是一个打字错误,我的错。@BercoviciAdrian,你可以将
D1
D2
放入
列表
,然后直接返回,我已经更新了我的答案,希望它能帮助你。
我已经检查了JsonSerializer选项,但在我的情况下,我不是进行序列化的人。
@RafiHenig,好的,只要删除JsonConvert.SerializeObject并直接返回
List,我已经更新了我的答案。
“我已经检查了JsonSerializer选项,但在我的情况下,我不是进行序列化的人。”
@RafiHenig,好的,只要删除JsonConvert.SerializeObject并直接返回
List
,我已经更新了我的答案。