【问题标题】:ASP.Net Core 3.1 WEB API - Controller method doesn't return correct JSONASP.Net Core 3.1 WEB API - 控制器方法不返回正确的 JSON
【发布时间】:2021-05-17 15:40:02
【问题描述】:

我有一个已升级到 ASp.Net Core 3.0 的 ASP.Net Core 2.2 网站。大多数 WEB API 方法按预期工作,并返回与升级前一样的数据。

但是这个 API 方法返回一个包含空元素的数组:

    [Route("api/TripAnalysis/{id:int}")]
    public List<TurAnalyse> GetTripAnalysis(int id)
    {
        var x = new List<TurAnalyse>() { new TurAnalyse { ArtId = 1, ArtNavn = "Havørn", C1 = "X", Su = false } };
        return x;
    }

TurAnalyse 模型类在这里:

public class TurAnalyse
{
    public int ArtId;
    public bool Su;
    public string ArtNavn;

    public string C1;
    public string C2;
    public string C3;
    public string C4;
    public string C5;
    public string C6;
}

我在调用控制器方法时得到了这个:

[{}]

所以它返回一个包含 1 个元素但没有属性或值的数组 - 不明白为什么?

【问题讨论】:

  • 这些是字段而不是属性。添加 {get;set;}
  • 如果你使用 System.Text.Json,你需要在序列化中选择include fields
  • 史蒂夫 - 你说的太对了 :-) - 感谢您看到显而易见的事实。

标签: c# json asp.net-core asp.net-web-api


【解决方案1】:

.NET Core 3.1 中的默认 JSON 序列化器不支持序列化字段。因此,要么将它们切换到属性,切换到 JSON.NET,要么跳转到支持字段的 .NET Core 5。例如

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers().AddJsonOptions(o => o.JsonSerializerOptions.IncludeFields = true); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多