如何使用 .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}]
我正在将 .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}]