如何使用 .Net Core Return 作为 json 的结构

How to Return a struct as json with .NetCore

我正在将 .Net Framework WebAPI 迁移到 .Net Core。使用 Framework(特别是使用 Newtonsoft.Json),class 或结构根据 Accept header 被 return 编辑为 xml 或 json。

使用 .Net Core,结构返回时总是空的 json:例如[{},{}].

从精简的新项目(即 WeatherController)开始,我该如何正确序列化它并 return non-empty json?

public struct MyStructure
{
    public double A;
    public double B;
}
    
[ApiController]
[Route("[controller]")]
public class MyStructureController : ControllerBase
{
    [HttpGet]
    public IEnumerable<MyStructure> Get()
    {
        return new List<MyStructure>
        {
            new MyStructure(){A = 1.2d, B = 5.6d},
            new MyStructure(){A = 2.2d, B = 3.3d},
        };
    }
}
//desired response:  [{"X":1.2,"Y":5.6},{"X":2.2,"Y":3.3}]

我在 supported, nor the unsupported 序列化文档中没有找到我需要的东西,但我显然忽略了一些东西!

尝试使用 public 属性而不是 public 变量。我认为 system.text.json 默认只序列化 public 属性

您需要在 JsonSerializerOptions 中设置 IncludeFields = true - class fields 也一样)。或者查看 (回复:propeties

不要让实例变量尝试使用 getter 和 setter 方法将它们更改为属性。

public struct MyStructure
{
    public double A {get;set;}
    public double B {get;set;}
}

这将帮助您获得所需的响应

 [{"X":1.2,"Y":5.6},{"X":2.2,"Y":3.3}]