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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:38:22