如何从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
相关产品推荐
相关产品推荐

