json 将从API控制器继承的DTO与父字段沿着返回到客户端

kqlmhetl  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个父DTO,如下所示:

public abstract class BaseDTO
{
   public list<string> message = new list<string>();
}

和子类:

public class MyDTO : BaseDTO
{
   public string name { get; set; }
}

现在,当我尝试在swagger架构部分中查看MyDTO时,BaseDTO的消息字段不会出现在字段列表中,当我尝试

return ok(MyDTO)

在我的web api控制器中,此字段未在客户端显示

nue99wik

nue99wik1#

安装Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget包,并在Program.cs中添加以下代码:

builder.Services.AddMvc().AddNewtonsoftJson(options => {
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});

下面是我的测试代码,它工作正常:
产品型号:

public class BaseDTO
{
    public List<string> message = new List<string>() { "test1","test2","test3" };
}

public class MyDTO : BaseDTO
{
    public string name { get; set; } 
}

控制器操作:

[HttpGet]
public IActionResult Test() 

    MyDTO myDTO = new MyDTO();
    myDTO.name = "name";

    return Ok(myDTO);
}

测试结果:

如果不想在BaseDTO中设置值,也可以设置myDTO.message

[HttpGet]
public IActionResult Test() 
{
    MyDTO myDTO = new MyDTO();
    myDTO.message.Add("test1");
    myDTO.message.Add("test2");
    myDTO.name = "name";

    return Ok(myDTO);
}

相关问题