如何通过Microsoft Graph Models读取Planner Checklist项内容?
提取Planner Checklist项的Title
你可以通过以下几种方式解决从AdditionalData中获取清单项标题的问题:
方法1:使用动态类型快速访问
直接将keyValuePair.Value转为动态类型,直接访问title属性:
if (taskDetails.Checklist != null) { foreach (var keyValuePair in taskDetails.Checklist.AdditionalData) { dynamic checklistItem = keyValuePair.Value; string itemTitle = checklistItem.title; // 这里可以对itemTitle进行后续处理,比如打印、存储等 } }
方法2:自定义模型类反序列化
如果偏好强类型操作,可以创建匹配PlannerCheckListItem结构的类,用Json序列化工具转换:
首先定义模型类:
public class CustomPlannerCheckListItem { [Newtonsoft.Json.JsonProperty("title")] public string Title { get; set; } [Newtonsoft.Json.JsonProperty("isChecked")] public bool IsChecked { get; set; } // 可根据需求添加orderHint、lastModifiedDateTime等其他属性 }
然后在循环中反序列化:
using Newtonsoft.Json; // ... if (taskDetails.Checklist != null) { foreach (var keyValuePair in taskDetails.Checklist.AdditionalData) { var itemJson = JsonConvert.SerializeObject(keyValuePair.Value); var checklistItem = JsonConvert.DeserializeObject<CustomPlannerCheckListItem>(itemJson); string itemTitle = checklistItem.Title; // 后续业务处理 } }
方法3:优化请求避免使用AdditionalData(推荐)
如果你的Graph SDK版本支持,确保请求PlannerTaskDetails时正确获取checklist的强类型对象,无需依赖AdditionalData:
请求时明确指定要获取的属性:
var taskDetails = await graphClient.Planner.Tasks[taskId].Details .Request() .Select("checklist") .GetAsync();
此时taskDetails.Checklist应该是PlannerCheckListItems类型,直接遍历即可:
if (taskDetails.Checklist != null) { foreach (var (key, checklistItem) in taskDetails.Checklist) { string itemTitle = checklistItem.Title; // 后续处理 } }
如果仍无法映射,建议检查SDK版本是否为最新,瘦客户端版本可能存在模型简化的情况,此时前两种方法更适用。
内容的提问来源于stack exchange,提问作者Brian Muir
相关产品推荐
相关产品推荐

