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

Microsoft.Graph 4.0.0创建带自定义列列表报id空值错误求助

问题原因

Microsoft.Graph 4.x版本切换为System.Text.Json作为默认序列化组件,默认会序列化所有值为null的属性。你构造的ColumnDefinition对象未赋值Id属性,序列化后的请求体中会携带"id": null字段,而Graph API的列表创建接口要求创建自定义列时不能传入id字段(id由服务端自动生成,且不允许为null),因此触发报错。

解决方案

以下两种方案任选其一即可:

方案1:调整Graph客户端序列化配置(改动最小,推荐)

初始化GraphServiceClient时,配置序列化规则忽略null值,避免null属性被加入请求体:

using Microsoft.Graph;
using System.Text.Json;

// 配置序列化选项,忽略null值
var jsonOptions = new JsonSerializerOptions
{
    IgnoreNullValues = true,
    PropertyNameCaseInsensitive = true
};
var customSerializer = new Serializer(jsonOptions);

// 实例化Graph客户端时传入自定义序列化器
var _client = new GraphServiceClient(
    authenticationProvider,
    serializer: customSerializer
);

修改后原有的创建逻辑无需改动即可正常运行。

方案2:分两步创建列表(兼容性最强,无需调整全局配置)

先创建不带自定义列的空列表,创建成功后再单独为列表添加自定义列:

// 第一步:创建空文档库
var emptyLibrary = new List()
{
    DisplayName = driveName,
    ListInfo = new ListInfo
    {
        Template = "documentLibrary"
    }
};
var createdLibrary = await _client.Sites[siteId].Lists.Request().AddAsync(emptyLibrary);

// 第二步:添加自定义列
var column1 = ColumnsBuilder.TextColumn("Column1", false, true);
var column2 = ColumnsBuilder.TextColumn("Column2", false, true);
await _client.Sites[siteId].Lists[createdLibrary.Id].Columns.Request().AddAsync(column1);
await _client.Sites[siteId].Lists[createdLibrary.Id].Columns.Request().AddAsync(column2);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:54:00