You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Microsoft Graph返回的value对象获取Group类型成员列表

提取组列表的实现方法

你不需要手动从AdditionalData中解析value字段,Microsoft Graph .NET SDK 已经自动将返回结果反序列化为强类型对象,直接调用返回结果的内置属性即可安全获取组列表。

推荐写法(直接读取SDK反序列化结果)

你调用接口返回的对象r类型为IGroupTransitiveMembersCollectionWithReferencesPage,其CurrentPage属性存储了当前分页下的所有传递成员。由于你已经在请求路径中指定了筛选类型为microsoft.graph.group,该属性下的所有元素都可以直接转换为Group类型:

using System.Linq;
using Microsoft.Graph;

// 你的原有请求代码
var queryOptions = new List<QueryOption>() 
{ 
   new QueryOption("$count", "true") 
}; 
var r = await  _graphServiceClient.Groups["你的组ID"].TransitiveMembers["microsoft.graph.group"]
    .Request(queryOptions)
    .Header("ConsistencyLevel", "eventual")
    .GetAsync(); 

// 提取当前页的组列表
List<Group> currentPageGroups = r.CurrentPage.Cast<Group>().ToList();

// 提取总计数
long? totalCount = null;
if (r.AdditionalData.TryGetValue("@odata.count", out object countObj) && countObj is long countVal)
{
    totalCount = countVal;
}

获取全量组列表(处理分页)

接口默认单页最多返回100条数据,如果传递组总数超过单页上限,需要循环拉取所有分页才能拿到完整结果:

List<Group> allTransitiveGroups = new List<Group>();
var currentResult = r;

while (currentResult != null)
{
    allTransitiveGroups.AddRange(currentResult.CurrentPage.Cast<Group>());
    // 存在下一页时继续请求
    currentResult = currentResult.NextPageRequest != null 
        ? await currentResult.NextPageRequest.GetAsync() 
        : null;
}

从已取出的value对象解析的方法

如果你已经通过TryGetValue拿到了value对象,v4版本Graph SDK默认使用Newtonsoft.Json做序列化,该value本质是JArray类型,可以直接反序列化为组列表:

using Newtonsoft.Json.Linq;

List<Group> groupsFromValue = new List<Group>();
if (r.AdditionalData.TryGetValue("value", out object valueObj) && valueObj is JArray groupArray)
{
    groupsFromValue = groupArray.ToObject<List<Group>>();
}

注意:这种手动解析AdditionalData的方式不推荐,SDK内置的CurrentPage属性已经做了类型适配和兼容性处理,稳定性更高。


内容的提问来源于stack exchange,提问作者user989988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:30:36