【问题标题】:Return nested arrays in restful api with dotnet core 3.0使用 dotnet core 3.0 在 restful api 中返回嵌套数组
【发布时间】:2019-12-18 19:59:50
【问题描述】:

我正在 dotnet core 3.0 中编写一个 api 调用并尝试返回几个对象。只要其中的信息简单,我就可以返回所有对象。但是,当我有一个对象数组(也包含数组)时,该对象的结果为空。

例如,在下面的代码中,前三项(一个c#对象、一个字符串列表和一个字符串)都返回值,但调用结果中chartdatasets列表为空。当我单步执行服务器端的代码时会填充它。

我必须做一些特别的事情来返回一个复杂对象的数组吗?

[HttpGet]
public ActionResult<List<Chart>> GetCharts()
{
    List<string> axisLabels = new List<string>() {"CLI","MC","MCAL","PAT","PTP","TP"};
    string chartTitle = "Outstanding AR by Fin Group";
    ReturnKey retKey = new ReturnKey() {AuthKey = "asdasdas", Message = "OK"};

    List<ChartDataSet> dataSetList = new List<ChartDataSet>();
    List<double> cData = new List<double>();
    cData.Add(37795.59);
    cData.Add(16839.71);
    cData.Add(144.89);
    cData.Add(90);
    cData.Add(216829.68);
    cData.Add(1764.52);
    List<string> cBg = new List<string>();
    dataSetList.Add(new ChartDataSet("Outstanding AR", cBg, cData));

    return Ok(new {retKey, axisLabels, chartTitle, dataSetList});
}

postman 中的结果如下所示。

{
    "retKey": {
        "authKey": "asdasdas",
        "message": "OK"
    },
    "axisLabels": [
        "CLI",
        "MC",
        "MCAL",
        "PAT",
        "PTP",
        "TP"
    ],
    "chartTitle": "Outstanding AR by Fin Group",
    "dataSetList": [
        {}
    ]
}

【问题讨论】:

  • 欢迎来到 StackOverflow!乍一看,你的回报看起来很奇怪。方法签名表示您正在返回图表列表,但在 Ok() 中您创建了匿名对象。也许如果你返回 Ok(new Chart(...)) 会有所帮助?
  • 感谢您的回复。我确实尝试了几种变体。原来它是 ChartDataSet 类的定义。我在下面发布了一个示例。但是,我同意你的返回值。我会考虑将其更改为更灵活,使其更有意义。

标签: c# .net-core .net-core-3.0 actionresult


【解决方案1】:

我没有发布 ChartDataSet 的定义,但事实证明这就是问题所在。通过与同事的讨论,我们发现 ChartDataSet 属性没有被封装。在将 {get;set} 添加到我想在 API 中返回的每个属性之后,它似乎正在工作。

    [Serializable]
public class ChartDataSet {
    public string label {get;set;}
    public string backgroundColor {get;set;}
    public List<double> data {get;set;}

    public ChartDataSet(string lbl, string bgcolor, List<double> datavalue)
    {
        label = lbl;
        backgroundColor = bgcolor;
        data = datavalue;
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多