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;
我正在从 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;