【问题标题】:How to send Collection of abstract types with ActionResult如何使用 ActionResult 发送抽象类型的集合
【发布时间】:2020-12-26 04:50:33
【问题描述】:

我正在尝试使用ActionResultController 中发回abstract 类型的集合。我不知道如何告诉序列化程序还包括派生类型的特定属性:

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

我怎样才能以一种简单而优雅的方式达到这个结果。我已经检查了JsonSerializer 选项,但在我的情况下,我不是进行序列化的人。

我得到了什么

[{ "Id":1} ,  { "Id":2 }]

我想要什么

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

【问题讨论】:

  • 能否请您编辑您的结果,因为它们是相同的。
  • 这是一个错字,我的错。
  • @BercoviciAdrian,你可以把D1D2放入List&lt;object&gt;,然后直接返回,我已经更新了我的答案,希望对你有帮助。

标签: asp.net-core serialization jsonserializer derived-types


【解决方案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&lt;object&gt;,我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多