Microsoft Graph API 结果未被视为 AngularJS 中的 JSON 对象

Microsoft Graph API result is not treated as a JSON object in AngularJS

我正在从 Microsoft Graph API 中获取组信息,它 return 的结果为:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups(id,displayName,description)",
  "value": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "description": "Admin",
      "displayName": "Admin"
    },
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "description": "End user",
      "displayName": "EndUser"
    },
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "description": "Administrator",
      "displayName": "Administrator"
    },
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "description": "XXX",
      "displayName": "XXX"
    }
  ]
}

我return这个来自服务器的字符串为:

return req.CreateResponse(HttpStatusCode.OK, groups);

在客户端的 AngularJS 1.6 中,它被视为字符串,而不是 JSON 对象。有谁知道可能出了什么问题?

发生这种情况是因为您显然是从 Web API 方法中返回一个 JSON 字符串。默认情况下,Web API 会自动序列化您提供的任何内容。因此,如果您给它一个 JSON 字符串,该字符串将被重新序列化,这意味着客户端必须将其反序列化两次才能获得该对象。如果你想通过原封不动地传递预先格式化的 JSON,你需要显式地将响应内容创建为字符串,这样它就不会被 Web API.

双重序列化

这样试试:

HttpResponseMessage response = req.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(groups, Encoding.UTF8, "application/json");
return response;